shell.setUserData(new ArrayList<LinearRing>());
public void setUserData(Object userData) { polygon.setUserData(userData); }
/** * Returns the completed OGC Polygon. * * @param geometryFactory Geometry factory to be used in Polygon creation. * @return Completed OGC Polygon. */ public Geometry create(GeometryFactory geometryFactory) { for (int i = 0; i < innerBoundaries.size(); i++) { LinearRing hole = (LinearRing) innerBoundaries.get(i); if (hole.crosses(outerBoundary)) { LOGGER.warning("Topology Error building polygon"); return null; } } LinearRing[] rings = (LinearRing[]) innerBoundaries.toArray(new LinearRing[innerBoundaries.size()]); Polygon polygon = geometryFactory.createPolygon(outerBoundary, rings); polygon.setUserData(getSRS()); polygon.setSRID(getSRID()); return polygon; } }
LinearRing shell = gf.createLinearRing(coords); Polygon bbox = gf.createPolygon(shell, null); bbox.setUserData(DefaultGeographicCRS.WGS84);
geom.setUserData(crs); return geom;
geom.setUserData(crs); return geom;
/** * @param polygon * @throws TransformException */ public Polygon transformPolygon(Polygon polygon, GeometryFactory gf) throws TransformException { LinearRing exterior = (LinearRing) transformLineString(polygon.getExteriorRing(), gf); LinearRing[] interiors = new LinearRing[polygon.getNumInteriorRing()]; for (int i = 0; i < interiors.length; i++) { interiors[i] = (LinearRing) transformLineString(polygon.getInteriorRingN(i), gf); } Polygon transformed = gf.createPolygon(exterior, interiors); transformed.setUserData(polygon.getUserData()); return transformed; } }
@Test public void testReprojectedPolygon() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); Rule rule = style.featureTypeStyles().get(0).rules().get(0); Polygon polygon = JTS.toGeometry(envUTM31N); polygon.setUserData(utm31n); rule.setFilter(ff.intersects(ff.property("geom"), ff.literal(polygon))); content.addLayer(new FeatureLayer(pointFS, style)); RendererBaseTest.showRender("Reprojected polygon", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); }
@Test public void testReprojectedPolygonFromDefinitionQuery() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); // build the style StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); // build a filter for the layer own definition query FeatureLayer layer = new FeatureLayer(pointFS, style); Polygon polygon = JTS.toGeometry((Envelope) envUTM31N); polygon.setUserData(utm31n); layer.setQuery( new DefaultQuery(null, ff.intersects(ff.property("geom"), ff.literal(polygon)))); content.addLayer(layer); RendererBaseTest.showRender( "Reprojected polygon as a definition query", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); } }
polygon.setUserData(((ReferencedEnvelope) envelope).getCoordinateReferenceSystem());
polygon.setUserData(bbox.getCoordinateReferenceSystem());
polygon.setUserData(getSRS()); polygon.setSRID(getSRID());
polygon.setUserData(null);
public Expression getExpression2() { Coordinate[] coords = new Coordinate[5]; coords[0] = new Coordinate(envelope.getMinX(), envelope.getMinY()); coords[1] = new Coordinate(envelope.getMinX(), envelope.getMaxY()); coords[2] = new Coordinate(envelope.getMaxX(), envelope.getMaxY()); coords[3] = new Coordinate(envelope.getMaxX(), envelope.getMinY()); coords[4] = new Coordinate(envelope.getMinX(), envelope.getMinY()); LinearRing ring = null; GeometryFactory gfac = new GeometryFactory(); try { ring = gfac.createLinearRing(coords); } catch (TopologyException tex) { throw new IllegalFilterException(tex.toString()); } Polygon polygon = gfac.createPolygon(ring, null); if (envelope instanceof ReferencedEnvelope) { ReferencedEnvelope refEnv = (ReferencedEnvelope) envelope; polygon.setUserData(refEnv.getCoordinateReferenceSystem()); } return factory.literal(polygon); }
/** * Converts a {@link BoundingBox} to a JTS polygon using the given JTS geometry factory. * * <p>The resulting polygon contains an outer ring with vertices: * (x1,y1),(x2,y1),(x2,y2),(x1,y2),(x1,y1) * * @param envelope The original envelope. * @return The envelope as a polygon. * @since 2.8 * @throws IllegalArgumentException if either {@code bbox} or {@code factory} is {@code null} */ public static Polygon toGeometry(BoundingBox bbox, final GeometryFactory factory) { ensureNonNull("bbox", bbox); ensureNonNull("factory", factory); Polygon polygon = factory.createPolygon( factory.createLinearRing( new Coordinate[] { new Coordinate(bbox.getMinX(), bbox.getMinY()), new Coordinate(bbox.getMaxX(), bbox.getMinY()), new Coordinate(bbox.getMaxX(), bbox.getMaxY()), new Coordinate(bbox.getMinX(), bbox.getMaxY()), new Coordinate(bbox.getMinX(), bbox.getMinY()) }), null); polygon.setUserData(bbox.getCoordinateReferenceSystem()); return polygon; }
/** * Generate bounding polygon for provided envelope. * * <p>For a ReferenedEnvelope the CoordinateReferenceSystem wil be preserved. * * @param env The envelope to set as the bounds. * @throws IllegalFilterException If the box can not be created. * @task Currently sets the SRID to null, which can cause problems with JTS when it comes to * doing spatial tests */ public static Polygon boundingPolygon(Envelope env) { Coordinate[] coords = new Coordinate[5]; coords[0] = new Coordinate(env.getMinX(), env.getMinY()); coords[1] = new Coordinate(env.getMinX(), env.getMaxY()); coords[2] = new Coordinate(env.getMaxX(), env.getMaxY()); coords[3] = new Coordinate(env.getMaxX(), env.getMinY()); coords[4] = new Coordinate(env.getMinX(), env.getMinY()); LinearRing ring = null; try { ring = GEOMETRY_FACTORY.createLinearRing(coords); } catch (TopologyException tex) { throw new IllegalFilterException(tex.toString()); } Polygon polygon = GEOMETRY_FACTORY.createPolygon(ring, null); if (env instanceof ReferencedEnvelope) { ReferencedEnvelope refEnv = (ReferencedEnvelope) env; polygon.setUserData(refEnv.getCoordinateReferenceSystem()); } return polygon; }
if (env instanceof ReferencedEnvelope) { ReferencedEnvelope refEnv = (ReferencedEnvelope) env; polygon.setUserData(refEnv.getCoordinateReferenceSystem());
public Expression getExpression2() { // in this case, the 3D BBOX falls back to regular 2D bbox behaviour (until there is more // support for 3D geometries) // 3DBBOX must be run as a post-filter in order to support the third coordinate. Coordinate[] coords = new Coordinate[5]; coords[0] = new Coordinate(envelope.getMinX(), envelope.getMinY()); coords[1] = new Coordinate(envelope.getMinX(), envelope.getMaxY()); coords[2] = new Coordinate(envelope.getMaxX(), envelope.getMaxY()); coords[3] = new Coordinate(envelope.getMaxX(), envelope.getMinY()); coords[4] = new Coordinate(envelope.getMinX(), envelope.getMinY()); LinearRing ring = null; GeometryFactory gfac = new GeometryFactory(); try { ring = gfac.createLinearRing(coords); } catch (TopologyException tex) { throw new IllegalFilterException(tex.toString()); } Polygon polygon = gfac.createPolygon(ring, null); if (envelope instanceof ReferencedEnvelope3D) { ReferencedEnvelope3D refEnv = (ReferencedEnvelope3D) envelope; polygon.setUserData(refEnv.getCoordinateReferenceSystem()); } return factory.literal(polygon); }
/** * @param polygon * @throws TransformException */ public Polygon transformPolygon(final Polygon polygon, final GeometryFactory gf) throws TransformException { final LinearRing exterior = (LinearRing) transformLineString(polygon.getExteriorRing(), gf); final LinearRing[] interiors = new LinearRing[polygon.getNumInteriorRing()]; for (int i = 0; i < interiors.length; i++) { interiors[i] = (LinearRing) transformLineString(polygon.getInteriorRingN(i), gf); } final Polygon transformed = gf.createPolygon(exterior, interiors); transformed.setUserData( polygon.getUserData() ); return transformed; }
@Test public void testGetCount() throws Exception { assertEquals(3, pointsSource.getCount(Query.ALL)); assertEquals(3, linesSource.getCount(Query.ALL)); Filter filter; filter = ff.id(Collections.singleton(ff.featureId(RepositoryTestCase.idP2))); assertEquals(1, pointsSource.getCount(new Query(pointsName, filter))); ReferencedEnvelope queryBounds = boundsOf(points1, points2); Polygon geometry = JTS.toGeometry(queryBounds); filter = ff.intersects(ff.property(pointsType.getGeometryDescriptor().getLocalName()), ff.literal(geometry)); assertEquals(2, pointsSource.getCount(new Query(pointsName, filter))); ReferencedEnvelope transformedQueryBounds; CoordinateReferenceSystem queryCrs = CRS.decode("EPSG:3857"); transformedQueryBounds = queryBounds.transform(queryCrs, true); geometry = JTS.toGeometry(transformedQueryBounds); geometry.setUserData(queryCrs); filter = ff.intersects(ff.property(pointsType.getGeometryDescriptor().getLocalName()), ff.literal(geometry)); assertEquals(2, pointsSource.getCount(new Query(pointsName, filter))); filter = ECQL.toFilter("sp = 'StringProp2_3' OR ip = 2000"); assertEquals(2, linesSource.getCount(new Query(linesName, filter))); }