public static Object buildBBOX(BBOX filter, Object extraData) { StringBuilder output = asStringBuilder(extraData); output.append("BBOX("); output.append(filter.getPropertyName()); output.append(", "); output.append(filter.getMinX()); output.append(","); output.append(filter.getMinY()); output.append(","); output.append(filter.getMaxX()); output.append(","); output.append(filter.getMaxY()); output.append(")"); return output; }
@Override public List getProperties(Object object, XSDElementDeclaration element) throws Exception { BBOX box = (BBOX) object; List properties = new ArrayList(); Envelope env = null; try { String srs = box.getSRS(); if (srs != null) { CoordinateReferenceSystem crs = CRS.decode(srs); env = new ReferencedEnvelope( box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY(), crs); } } catch (Throwable t) { // never mind } if (env == null) { env = new Envelope(box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY()); } properties.add(new Object[] {ENVELOPE_PARTICLE, env}); return properties; } }
public Object getProperty(Object object, QName name) throws Exception { BBOX box = (BBOX) object; // <xsd:element ref="ogc:PropertyName"/> if (OGC.PropertyName.equals(name)) { return factory.property(box.getPropertyName()); } // <xsd:element ref="gml:Box"/> if (GML.Box.equals(name) || org.geotools.gml3.GML.Envelope.equals(name)) { try { String srs = box.getSRS(); if (srs != null) { CoordinateReferenceSystem crs = CRS.decode(srs); return new ReferencedEnvelope( box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY(), crs); } } catch (Throwable t) { // never mind } return new Envelope(box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY()); } return null; } }
public Object visit(BBOX filter, Object data) { ReferencedEnvelope bbox = bbox(data); // consider doing reprojection here into data CRS? Envelope bounds = new Envelope( filter.getMinX(), filter.getMaxX(), filter.getMinY(), filter.getMaxY()); if (bbox != null) { bbox.expandToInclude(bounds); return bbox; } else { return bbox(bounds); } } /**
/** Expands the BBOX in the Filter. */ @SuppressWarnings("deprecation") @Override public Object visit(BBOX filter, Object extraData) { // no need to change the property name Expression propertyName = filter.getExpression1(); /** Using the deprecated methods since they are too useful... */ double minx = filter.getMinX(); double miny = filter.getMinY(); double maxx = filter.getMaxX(); double maxy = filter.getMaxY(); String srs = filter.getSRS(); return getFactory(extraData) .bbox( propertyName, minx - expandMinX, miny - expandMaxX, maxx + expandMinY, maxy + expandMaxY, srs); } }
@Override public Object visit(BBOX filter, Object extraData) { // rename if necessary Expression e1 = filter.getExpression1(); if (e1 instanceof PropertyName) { PropertyName pname = (PropertyName) e1; String name = pname.getPropertyName(); if (name != null && name.equals(source)) { e1 = ff.property(target); } } // duplicate preserving fast bbox filters if (filter instanceof FastBBOX && e1 instanceof PropertyName) { FastBBOX fbox = (FastBBOX) filter; return new FastBBOX((PropertyName) e1, fbox.getEnvelope(), getFactory(extraData)); } else { double minx = filter.getMinX(); double miny = filter.getMinY(); double maxx = filter.getMaxX(); double maxy = filter.getMaxY(); String srs = filter.getSRS(); return getFactory(extraData).bbox(e1, minx, miny, maxx, maxy, srs); } } }
public Object visit(BBOX filter, Object extraData) { Expression propertyName = visit(filter.getExpression1(), extraData); if (!(filter instanceof BBOX3D)) { double minx = filter.getMinX(); double miny = filter.getMinY(); double maxx = filter.getMaxX(); double maxy = filter.getMaxY(); String srs = filter.getSRS(); return getFactory(extraData) .bbox(propertyName, minx, miny, maxx, maxy, srs, filter.getMatchAction()); } return getFactory(extraData).bbox(propertyName, filter.getBounds()); }
/** The provided target CRS (3857) should override the native one (4326). */ public void testBboxReprojectWithTargetCrsProvided() throws FactoryException { ReprojectingFilterVisitor reprojector = new ReprojectingFilterVisitor(ff, ft, CRS.decode("EPSG:3857")); BBOX bbox = ff.bbox(ff.property("geom"), 10, 15, 20, 25, "EPSG:4326"); Filter clone = (Filter) bbox.accept(reprojector, null); assertNotSame(bbox, clone); BBOX clonedBbox = (BBOX) clone; assertEquals(bbox.getPropertyName(), clonedBbox.getPropertyName()); assertEquals(1113194.9079327357, clonedBbox.getMinX(), 0.1); assertEquals(1689200.1396078924, clonedBbox.getMinY(), 0.1); assertEquals(2226389.8158654715, clonedBbox.getMaxX(), 0.1); assertEquals(2875744.6243522423, clonedBbox.getMaxY(), 0.1); assertEquals("EPSG:3857", clonedBbox.getSRS()); }
public void testParse() throws Exception { FilterMockData.bbox(document, document); BBOX box = (BBOX) parse(); assertEquals("foo", box.getPropertyName()); assertEquals(0, box.getMinX(), 0.0); assertEquals(0, box.getMinY(), 0.0); assertEquals(1, box.getMaxX(), 0.0); assertEquals(1, box.getMaxY(), 0.0); assertEquals("EPSG:4326", box.getSRS()); }
/** * The provided target CRS (3857) should not override the native one (4326) since the use * property is not a geometry. */ public void testTargetCrsProvidedButNoGeometryProperty() throws FactoryException { ReprojectingFilterVisitor reprojector = new ReprojectingFilterVisitor(ff, ft, CRS.decode("EPSG:3857")); BBOX bbox = ff.bbox(ff.property("name"), 10, 15, 20, 25, "EPSG:4326"); BBOX clone = (BBOX) bbox.accept(reprojector, null); assertNotSame(bbox, clone); // check that no reprojection was applied assertEquals(bbox.getPropertyName(), clone.getPropertyName()); assertEquals(10.0, clone.getMinX(), 0.1); assertEquals(15.0, clone.getMinY(), 0.1); assertEquals(20.0, clone.getMaxX(), 0.1); assertEquals(25.0, clone.getMaxY(), 0.1); assertEquals("EPSG:4326", clone.getSRS()); }
public static Object buildBBOX(BBOX filter, Object extraData) { StringBuilder output = asStringBuilder(extraData); output.append( "BBOX("); output.append( filter.getPropertyName() ); output.append( ", "); output.append( filter.getMinX() ); output.append( ","); output.append( filter.getMinY() ); output.append( ","); output.append( filter.getMaxX() ); output.append( ","); output.append( filter.getMaxY() ); output.append( ")"); return output; }
public void testBboxReproject() { // see if coordinates gets flipped, urn forces lat/lon interpretation BBOX bbox = ff.bbox(ff.property("geom"), 10, 15, 20, 25, "urn:x-ogc:def:crs:EPSG:6.11.2:4326"); Filter clone = (Filter) bbox.accept(reprojector, null); assertNotSame(bbox, clone); BBOX clonedBbox = (BBOX) clone; assertEquals(bbox.getPropertyName(), clonedBbox.getPropertyName()); assertEquals(15, clonedBbox.getMinX(), 1e-6); assertEquals(10, clonedBbox.getMinY(), 1e-6); assertEquals(25, clonedBbox.getMaxX(), 1e-6); assertEquals(20, clonedBbox.getMaxY(), 1e-6); assertEquals("EPSG:4326", clonedBbox.getSRS()); }
private String printBBoxGet( BBOX bbox, String typeName ) throws IOException { return bbox.getMinX() + "," + bbox.getMinY() + "," + bbox.getMaxX() + "," + bbox.getMaxY(); } // private String printBBoxGet( org.opengis.filter.Filter f, String typename) throws IOException {
public void testBboxReprojectNoNativeAuthority() throws Exception { // like WGS84, but no authority String wkt = "GEOGCS[\"WGS 84\", DATUM[\"World Geodetic System 1984\", SPHEROID[\"WGS 84\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"degree\", 0.017453292519943295], AXIS[\"Geodetic longitude\", EAST], AXIS[\"Geodetic latitude\", NORTH]]"; CoordinateReferenceSystem crs = CRS.parseWKT(wkt); SimpleFeatureType newFt = FeatureTypes.transform(ft, crs); reprojector = new ReprojectingFilterVisitor(ff, newFt); BBOX bbox = ff.bbox(ff.property("geom"), 10, 15, 20, 25, "urn:x-ogc:def:crs:EPSG:6.11.2:4326"); Filter clone = (Filter) bbox.accept(reprojector, null); assertNotSame(bbox, clone); BBOX clonedBbox = (BBOX) clone; assertEquals(bbox.getPropertyName(), clonedBbox.getPropertyName()); assertTrue(15 == clonedBbox.getMinX()); assertTrue(10 == clonedBbox.getMinY()); assertTrue(25 == clonedBbox.getMaxX()); assertTrue(20 == clonedBbox.getMaxY()); // the srs code cannot be found, but it's legal to use a WKT description instead // CoordinateReferenceSystem reprojected = CRS.parseWKT(clonedBbox.getSRS()); // assertTrue(CRS.equalsIgnoreMetadata(crs, reprojected)); }
public Object getProperty(Object object, QName name) throws Exception { BBOX box = (BBOX) object; //<xsd:element ref="ogc:PropertyName"/> if (OGC.PropertyName.equals(name)) { return factory.property(box.getPropertyName()); } //<xsd:element ref="gml:Box"/> if (GML.Box.equals(name)) { return new Envelope(box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY()); } return null; } }
@Override public Object visit(BBOX filter, Object data) { final ReferencedEnvelope bbox= new ReferencedEnvelope( filter.getMinX(), filter.getMaxX(), filter.getMinY(), filter.getMaxY(), null); if(this.bbox!=null) this.bbox=(ReferencedEnvelope) this.bbox.intersection(bbox); else this.bbox=bbox; return super.visit(filter, data); }
/** {@inheritDoc} */ @Override public Object visit(BBOX filter, Object userData) { Envelope env = new Envelope(filter.getMinX(), filter.getMaxX(), filter.getMinY(), filter.getMaxY()); String finalName = parsePropertyName(geomName, userData); return SpatialRestrictions.filter(finalName, env, srid); }
public Object visit(BBOX filter, Object extraData) { String propertyName=filter.getPropertyName(); double minx=filter.getMinX(); double miny=filter.getMinY(); double maxx=filter.getMaxX(); double maxy=filter.getMaxY(); String srs=filter.getSRS(); return getFactory(extraData).bbox(propertyName, minx, miny, maxx, maxy, srs); }
public Object visit( BBOX filter, Object data ) { ReferencedEnvelope bbox = bbox( data ); // consider doing reprojection here into data CRS? Envelope bounds = new Envelope(filter.getMinX(), filter.getMaxX(), filter.getMinY(), filter .getMaxY()); if(bbox != null) { bbox.expandToInclude(bounds); return bbox; } else { return bbox(bounds); } } /**
public Object visit(BBOX filter, Object extraData) { Expression propertyName = visit(filter.getExpression1(), extraData); double minx=filter.getMinX(); double miny=filter.getMinY(); double maxx=filter.getMaxX(); double maxy=filter.getMaxY(); String srs=filter.getSRS(); return getFactory(extraData).bbox(propertyName, minx, miny, maxx, maxy, srs); }