Package org.geotools.styling

Source Code of org.geotools.styling.UserLayerTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2007-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.styling;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;

import org.geotools.data.DataStore;
import org.geotools.data.memory.MemoryDataStore;
import org.geotools.data.memory.MemoryFeatureCollection;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.factory.GeoTools;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.referencing.CRS;
import org.geotools.test.TestData;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.PropertyIsLessThan;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.PrecisionModel;

/**
*
*
* @source $URL$
*/
public class UserLayerTest extends TestCase {

    private static final String CRS_WKT = "GEOGCS[\"WGS 84\", "
            + "  DATUM[\"WGS_1984\","
            + "    SPHEROID[\"WGS 84\", 6378137.0, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]],"
            + "    AUTHORITY[\"EPSG\",\"6326\"]],"
            + "  PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]],"
            + "  UNIT[\"degree\", 0.017453292519943295],"
            + "  AXIS[\"Lon\", EAST]," + "  AXIS[\"Lat\", NORTH],"
            + "  AUTHORITY[\"EPSG\",\"4326\"]]";

    private static final int SRID = 4326;

    private static final String LAYER_NAME = "user-layer-1";

    private static final String ID_COLUMN = "id";

    private static final String GEOMETRY_COLUMN = "geometry";

    private static final String LABEL_COLUMN = "label";

    private static final String ID_1 = "point-1";

    private static final double X_1 = -180.0;

    private static final double Y_1 = -90.0;

    private static final String LABEL_1 = "point location #1";

    private static final String ID_2 = "point-2";

    private static final double X_2 = +180.0;

    private static final double Y_2 = +90.0;

    private static final String LABEL_2 = "point location #2";

    private static final double OPACITY = 0.75;

    private static final String IMAGE_EXT = "jpg";

    private static final String IMAGE_URL = "file:/somewhere/image."
            + IMAGE_EXT;

    private static final String MY_NAMESPACE = "integeo";

    private static final URI MY_URI;

    private static final String MY_FEATURE = "myFeature";
    static {
        try {
            MY_URI = new URI("http://geotools.org");
        } catch (URISyntaxException x) {
            throw new ExceptionInInitializerError(x);
        }
    }

    public void testUserLayerWithInlineFeatures() throws Exception {
        // create the feature's schema ----------------------------------------
        final CoordinateReferenceSystem crs = CRS.parseWKT(CRS_WKT);
        SimpleFeatureTypeBuilder ftb = new SimpleFeatureTypeBuilder();
        ftb.add(ID_COLUMN, Integer.class);
    ftb.add(GEOMETRY_COLUMN, Point.class, crs);
    ftb.add(LABEL_COLUMN, String.class);
    ftb.setName(MY_FEATURE);
        final SimpleFeatureType schema = ftb.buildFeatureType();

        // create a feature collection ----------------------------------------
        final MemoryFeatureCollection fc = new MemoryFeatureCollection(schema);

        // populate the collection --------------------------------------------
        final PrecisionModel pm = new PrecisionModel(PrecisionModel.FLOATING);
        final GeometryFactory jtsFactory = new GeometryFactory(pm, SRID);

        // create 1st point
        final Point g1 = jtsFactory.createPoint(new Coordinate(X_1, Y_1));
        fc.add(SimpleFeatureBuilder.build(schema, new Object[] { new Integer(1), g1, LABEL_1 }, ID_1));

        // create 2nd point
        final Point g2 = jtsFactory.createPoint(new Coordinate(X_2, Y_2));
        fc.add(SimpleFeatureBuilder.build(schema, new Object[] { new Integer(2), g2, LABEL_2 }, ID_2));

        final DataStore ds = new MemoryDataStore(fc);

        // create and populate the layer --------------------------------------
        final StyleFactory sf = CommonFactoryFinder.getStyleFactory(GeoTools.getDefaultHints());

        final UserLayer layer = sf.createUserLayer();
        layer.setName(LAYER_NAME);
        layer.setInlineFeatureType(schema);
        layer.setInlineFeatureDatastore(ds);

        // create a user style and add it to that layer -----------------------
        final Style style = sf.createStyle();

        final StyleBuilder sb = new StyleBuilder(sf);
        final ExternalGraphic overlay = sb.createExternalGraphic(IMAGE_URL,
                "image/" + IMAGE_EXT);
        final Graphic g = sb.createGraphic(overlay, null, null, OPACITY,
                Double.NaN, 0.0);
        final PointSymbolizer ps = sb.createPointSymbolizer(g);
        final FeatureTypeStyle fts = sb.createFeatureTypeStyle(ps);
        fts.setFeatureTypeName(MY_NAMESPACE + ":" + MY_FEATURE);

        style.addFeatureTypeStyle(fts);
        layer.addUserStyle(style);

        // create an SLD and populate it with that styled layer ---------------
        final StyledLayerDescriptor sld1 = sf.createStyledLayerDescriptor();
        sld1.addStyledLayer(layer);

        // marshal the SLD to XML ---------------------------------------------
        final Map nsMap = new HashMap();
        nsMap.put(MY_URI, MY_NAMESPACE);
        final SLDTransformer sldTransformer = new SLDTransformer(nsMap);
        sldTransformer.setIndentation(2);
        String xml = sldTransformer.transform(sld1);

        // unmarshal it back to an SLD instance -------------------------------
        final InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8"));
        final SLDParser parser = new SLDParser(sf);
        parser.setInput(is);
        final StyledLayerDescriptor sld2 = parser.parseSLD();
        xml = sldTransformer.transform(sld2);

        // check both SLDs ----------------------------------------------------
        final StyledLayer[] layers = sld2.getStyledLayers();
        assertNotNull("Styled layers array MUST NOT be null", layers);
        assertEquals("Styled layers array MUST be 1-element long", 1,
                layers.length);
        final StyledLayer sLayer = layers[0];
        assertNotNull("Single styled layer MUST NOT be null", sLayer);
        assertTrue("Single layer MUST be a UserLayer", UserLayer.class
                .isAssignableFrom(sLayer.getClass()));
        final UserLayer uLayer = (UserLayer) sLayer;
        final String lName = uLayer.getName();
        assertEquals("Read layer name MUST match", LAYER_NAME, lName);
        final SimpleFeatureType ft = uLayer.getInlineFeatureType();
        assertNotNull("Unmarshalled feature type MUST NOT be null", ft);
        final String fName = ft.getTypeName();
        assertEquals("Read feature type name MUST match", MY_FEATURE, fName);
        assertEquals(CRS.decode("EPSG:4326"), ft.getGeometryDescriptor().getCoordinateReferenceSystem());
    }
   
    public void testUserLayerWithRemoteOWS() throws Exception {
        URL sldUrl = TestData.getResource(this, "remoteOws.sld");
        StyleFactory factory = CommonFactoryFinder.getStyleFactory(null);
        SLDParser stylereader = new SLDParser(factory, sldUrl);
        StyledLayerDescriptor sld = stylereader.parseSLD();
        assertEquals(1, sld.getStyledLayers().length);
        assertTrue(sld.getStyledLayers()[0] instanceof UserLayer);
        UserLayer layer = (UserLayer) sld.getStyledLayers()[0];
        assertEquals("LayerWithRemoteOWS", layer.getName());
        assertNotNull(layer.getRemoteOWS());
        assertEquals("WFS", layer.getRemoteOWS().getService());
        assertEquals("http://sigma.openplans.org:8080/geoserver/wfs?", layer.getRemoteOWS().getOnlineResource());
        assertEquals(1, layer.getLayerFeatureConstraints().length);
        FeatureTypeConstraint ftc = layer.getLayerFeatureConstraints()[0];
        assertEquals("topp:states", ftc.getFeatureTypeName());
        assertNotNull(ftc.getFilter());
        assertTrue(ftc.getFilter() instanceof PropertyIsLessThan);
    }
}
TOP

Related Classes of org.geotools.styling.UserLayerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.