public Object accept(FilterVisitor visitor, Object context) { Object result = visitor.visit(this, context); if (!(result instanceof BBOX)) return result; BBOX clone = (BBOX) result; if (clone.getExpression1().equals(getExpression1()) && clone.getExpression2().equals(getExpression2())) return new FastBBOX(property, envelope, factory); return result; }
public Object visit(final BBOX filter, Object data) { data = filter.getExpression1().accept(this, data); data = filter.getExpression2().accept(this, data); return data; }
@Override public Object visit(final BBOX filter, Object data) { data = geom(filter.getExpression1(), data); data = geom(filter.getExpression2(), data); return data; }
public Object visit(final BBOX filter, Object data) { // We will just use a simple wrapper until we add a getExpression method PropertyName property = new PropertyName() { public String getPropertyName() { return filter.getPropertyName(); } public Object accept(ExpressionVisitor visitor, Object data) { return visitor.visit(this, data); } public Object evaluate(Object object) { return null; } public Object evaluate(Object object, Class context) { return null; } public NamespaceSupport getNamespaceContext() { return null; } }; property.accept(this, data); if (found) return found; filter.getExpression2().accept(this, data); return found; }
public Object visit(final BBOX filter, Object data) { data = filter.getExpression1().accept(this, data); if (found(data)) return data; data = filter.getExpression2().accept(this, data); return data; }
public Object visit(BBOX filter, Object extraData) { // grab the original envelope data BoundingBox boundaries = filter.getBounds(); // parse the srs, it might be a code or a WKT definition CoordinateReferenceSystem crs = boundaries.getCoordinateReferenceSystem(); // if no srs is specified we can't transform anyways if (crs == null) return super.visit(filter, extraData); // grab the property data PropertyName propertyName = null; // get the expression as is to preserve namespace context if (filter.getExpression1() instanceof PropertyName) { propertyName = (PropertyName) filter.getExpression1(); } else if (filter.getExpression2() instanceof PropertyName) { propertyName = (PropertyName) filter.getExpression2(); } CoordinateReferenceSystem targetCrs = findPropertyCRS(propertyName); // if there is a mismatch, reproject and replace if (crs != null && targetCrs != null && !CRS.equalsIgnoreMetadata(crs, targetCrs)) { ReferencedEnvelope envelope = ReferencedEnvelope.reference(boundaries); try { envelope = envelope.transform(targetCrs, true); } catch (TransformException e) { throw new RuntimeException(e); } catch (FactoryException e) { throw new RuntimeException(e); } boundaries = envelope; } return getFactory(extraData).bbox(propertyName, boundaries); }
public Object visit(BBOX filter, Object extraData) { if (filter.getExpression2() instanceof Literal) { Literal bboxLiteral = (Literal) filter.getExpression2(); if (bboxLiteral.getValue() instanceof BoundingBox) { BoundingBox bounds = (BoundingBox) bboxLiteral.getValue();
public Object visit(BBOX filter, Object extraData) { Expression left = filter.getExpression1(); Expression right = filter.getExpression2(); final String type = "BBOX"; start(type); left.accept(this, extraData); if (right instanceof Literal) { Literal literal = (Literal) right; Envelope bbox = literal.evaluate(null, Envelope.class); if (bbox != null) { geometryEncoder.encode(bbox); } else { right.accept(this, extraData); } } else { right.accept(this, extraData); } end(type); return extraData; }
@Test public void force3DCRS2DEnvelope() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:4939", true); CoordinateReferenceSystem hcrs = CRS.getHorizontalCRS(crs); BBOX bbox = ff.bbox("the_geom", -180, -90, 180, 90, null); DefaultCRSFilterVisitor visitor = new DefaultCRSFilterVisitor(ff, crs); BBOX filtered = (BBOX) bbox.accept(visitor, null); Literal box = (Literal) filtered.getExpression2(); Geometry g = (Geometry) box.evaluate(null); assertEquals(hcrs, g.getUserData()); }
@Test public void testPreserveOriginalSRS() throws NoSuchAuthorityCodeException, FactoryException { String srs = "AUTO:42004,9001,0,33"; CoordinateReferenceSystem crs = CRS.decode(srs); BBOX bbox = ff.bbox(ff.property(""), 0, 1000, 2000, 3000, srs); Geometry geom = bbox.getExpression2().evaluate(null, Geometry.class); assertEquals(crs, geom.getUserData()); assertEquals(srs, bbox.getSRS()); } }
@Override public Object visit(BBOX filter, Object extraData) { BasicDBObject output = asDBObject(extraData); // TODO: handle swapping of operands Object e1 = filter.getExpression1().accept(this, Geometry.class); Envelope envelope = filter.getExpression2().evaluate(null, Envelope.class); DBObject geometryDBObject = geometryBuilder.toObject(envelope); addCrsToGeometryDBObject(geometryDBObject); DBObject dbo = BasicDBObjectBuilder.start() .push("$geoIntersects") .add("$geometry", geometryDBObject) .get(); output.put((String) e1, dbo); return output; }
@Test public void force3DCRS3DEnvelope() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:4939", true); CoordinateReferenceSystem hcrs = CRS.getHorizontalCRS(crs); BBOX bbox = ff.bbox( ff.property("the_geom"), new ReferencedEnvelope3D(-180, 180, -90, 90, 0, 100, null)); DefaultCRSFilterVisitor visitor = new DefaultCRSFilterVisitor(ff, crs); BBOX filtered = (BBOX) bbox.accept(visitor, null); Literal box = (Literal) filtered.getExpression2(); Geometry g = (Geometry) box.evaluate(null); assertEquals(crs, g.getUserData()); } }
Envelope bbox = null; Expression leftGeometry = filter.getExpression1(); Expression rightGeometry = filter.getExpression2(); boolean clipped = false;
public Object visit( final BBOX filter, Object data ) { // We will just use a simple wrapper until we add a getExpression method PropertyName property = new PropertyName(){ public String getPropertyName() { return filter.getPropertyName(); } public Object accept( ExpressionVisitor visitor, Object data ) { return visitor.visit(this, data); } public Object evaluate( Object object ) { return null; } public Object evaluate( Object object, Class context ) { return null; } public NamespaceSupport getNamespaceContext() { return null; } }; property.accept(this, data); if( found ) return found; filter.getExpression2().accept(this, data); return found; }
public Object visit( final BBOX filter, Object data ) { data = filter.getExpression1().accept( this, data ); data = filter.getExpression2().accept( this, data ); return data; }
public Object accept(FilterVisitor visitor, Object context) { Object result = visitor.visit(this, context); if(!(result instanceof BBOX)) return result; BBOX clone = (BBOX) result; if(clone.getExpression1().equals(getExpression1()) && clone.getExpression2().equals(getExpression2())) return new FastBBOX(property, envelope, factory); return result; }
public Object visit( final BBOX filter, Object data ) { data = filter.getExpression1().accept( this, data ); if( found(data)) return data; data = filter.getExpression2().accept( this, data ); return data; }
@Override public Object visit(BBOX filter, Object extraData) { String propertyName = null; if (filter.getExpression1() instanceof PropertyName) { propertyName = ((PropertyName) filter.getExpression1()).getPropertyName(); } else if (filter.getExpression2() instanceof PropertyName) { propertyName = ((PropertyName) filter.getExpression2()).getPropertyName(); } if (propertyName != null) { PropertyName propertyAtt = ff.property(propertyName, nsContext); filter = ff.bbox(propertyAtt, filter.getBounds()); } return filter; } }
public Object visit(BBOX filter, Object extraData) { if (filter.getExpression2() instanceof Literal) { Literal bboxLiteral = (Literal) filter.getExpression2(); if (bboxLiteral.getValue() instanceof BoundingBox) { BoundingBox bounds = (BoundingBox) bboxLiteral.getValue(); return ff.bbox(filter.getExpression1(), new ReferencedEnvelope( bounds.getMinY(), bounds.getMaxY(), bounds.getMinX(), bounds.getMaxX(), bounds.getCoordinateReferenceSystem())); } else if (bboxLiteral.getValue() instanceof Geometry) { Geometry geom = (Geometry) bboxLiteral.getValue(); Envelope geomEnvelope = geom.getEnvelopeInternal(); return ff.bbox(filter.getExpression1(), new ReferencedEnvelope( geomEnvelope.getMinY(), geomEnvelope.getMaxY(), geomEnvelope.getMinX(), geomEnvelope.getMaxX(), null)); } } return filter; }
public Object visit(BBOX filter, Object extraData) { Expression left = filter.getExpression1(); Expression right = filter.getExpression2(); final String type = "BBOX"; start(type); left.accept(this,extraData); if( right instanceof Literal){ Literal literal = (Literal) right; Envelope bbox = literal.evaluate(null, Envelope.class); if( bbox != null ){ encode( bbox ); } else { right.accept(this,extraData); } } else { right.accept(this,extraData); } end(type); return extraData; }