/** * Please note we are only visiting literals involved in spatial operations. * * @param literal , hopefully a Geometry or Envelope * @param data Incoming BoundingBox (or Envelope or CRS) * @return ReferencedEnvelope updated to reflect literal */ @Override public Object visit(final Literal expression, final Object data) { final Object value = expression.getValue(); if (value instanceof Geometry) { final Geometry geometry = (Geometry) value; return geometry; } else { LOGGER.info("LiteralExpression ignored!"); } return bbox(data); }
@Override public Object visit(final Disjoint filter, final Object data) { // disjoint does not define a rectangle, but a hole in the // Cartesian plane, no way to limit it return new ExtractGeometryFilterVisitorResult(infinity(), null); }
private Geometry getBBox(final Query query, final ReferencedEnvelope envelope) { if (envelope != null) { return new GeometryFactory().toGeometry(envelope); } final String geomAtrributeName = reader.getComponents().getAdapter().getFeatureType().getGeometryDescriptor().getLocalName(); final ExtractGeometryFilterVisitorResult geoAndCompareOp = ExtractGeometryFilterVisitor.getConstraints( query.getFilter(), reader.getComponents().getAdapter().getFeatureType().getCoordinateReferenceSystem(), geomAtrributeName); if (geoAndCompareOp == null) { return reader.clipIndexedBBOXConstraints(null); } else { return reader.clipIndexedBBOXConstraints(geoAndCompareOp.getGeometry()); } }
/** * @param filter * @param crs * @return null if empty constraint (infinite not supported) */ public static ExtractGeometryFilterVisitorResult getConstraints( final Filter filter, final CoordinateReferenceSystem crs, final String attributeOfInterest) { final ExtractGeometryFilterVisitorResult geoAndCompareOpData = (ExtractGeometryFilterVisitorResult) filter.accept( new ExtractGeometryFilterVisitor(crs, attributeOfInterest), null); final Geometry geo = geoAndCompareOpData.getGeometry(); // empty or infinite geometry simply return null as we can't create // linear constraints from if ((geo == null) || geo.isEmpty()) { return null; } final double area = geo.getArea(); if (Double.isInfinite(area) || Double.isNaN(area)) { return null; } return geoAndCompareOpData; }
@Override public Object visit(final DWithin filter, final Object data) { final Geometry bbox = bbox(data); if (!attributeOfInterest.equals(filter.getExpression1().toString())) { return new ExtractGeometryFilterVisitorResult(infinity(), null); return new ExtractGeometryFilterVisitorResult(infinity(), null);
ExtractGeometryFilterVisitor.getConstraints( cqlFilter, adapter.getFeatureType().getCoordinateReferenceSystem(),
new ExtractGeometryFilterVisitor( GeometryUtils.getDefaultCRS(), geometryAttribute),
@Override public Object visit(final BBOX filter, final Object data) { if (attributeOfInterest.equals(filter.getExpression1().toString())) { final Geometry bbox = bbox(data); final BoundingBox referencedBBox = filter.getBounds(); Geometry bounds = return new ExtractGeometryFilterVisitorResult(infinity(), null);
if (filter != null) { final ExtractGeometryFilterVisitorResult geometryAndCompareOp = ExtractGeometryFilterVisitor.getConstraints( filter, GeoWaveGTRasterFormat.DEFAULT_CRS,
@Override public Object visitNullFilter(final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); } }
final ExtractGeometryFilterVisitorResult geoAndCompareOpData = (ExtractGeometryFilterVisitorResult) filter.accept( new ExtractGeometryFilterVisitor(GeometryUtils.getDefaultCRS(), geometryAttribute), null); bbox = geoAndCompareOpData.getGeometry();
if (filter != null) { final ExtractGeometryFilterVisitorResult geometryAndCompareOp = ExtractGeometryFilterVisitor.getConstraints( filter, GeometryUtils.getDefaultCRS(),
@Override public Object visit(final PropertyIsGreaterThan filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final Beyond filter, final Object data) { // beyond a certain distance from a finite object, no way to limit it return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final Add expression, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final PropertyIsLike filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final PropertyIsNull filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final Divide expression, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final Id filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
@Override public Object visit(final PropertyIsEqualTo filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }