final ExtractGeometryFilterVisitorResult currentResult = (ExtractGeometryFilterVisitorResult) obj; final Geometry currentGeom = currentResult.getGeometry(); final double currentArea = currentGeom.getArea(); if (currentResult.matchPredicate(finalResult)) { finalResult = new ExtractGeometryFilterVisitorResult( finalResult.getGeometry().intersection(currentGeom), currentResult.getCompareOp()); } else { new ExtractGeometryFilterVisitorResult( finalResult.getGeometry().intersection(currentGeom), null); finalResult = new ExtractGeometryFilterVisitorResult(finalResult.getGeometry(), null);
/** * @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; }
final Geometry geometry = geometryAndCompareOp.getGeometry(); final GeoConstraintsWrapper geoConstraints = GeometryUtils.basicGeoConstraintsWrapperFromGeometry(geometry); final CompareOperation extractedCompareOp = geometryAndCompareOp.getCompareOp(); if ((timeConstraintSet != null) && !timeConstraintSet.isEmpty()) {
@Override public Object visit(final PropertyName expression, final Object data) { return new ExtractGeometryFilterVisitorResult(null, null); }
/** * @param otherResult is ExtractGeometryFilterVisitorResult object * @return True if predicates of both ExtractGeometryFilterVisitorResult objects are same */ public boolean matchPredicate(final ExtractGeometryFilterVisitorResult otherResult) { return (this.compareOp == otherResult.getCompareOp()); } }
geometryAttribute), null); bbox = geoAndCompareOpData.getGeometry();
@Override public Object visit(final ExcludeFilter filter, final Object data) { return new ExtractGeometryFilterVisitorResult(null, 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()); } }
@Override public Object visit(final Or filter, final Object data) { ExtractGeometryFilterVisitorResult finalResult = new ExtractGeometryFilterVisitorResult( new GeometryFactory().toGeometry(new Envelope()), null); final ExtractGeometryFilterVisitorResult currentResult = (ExtractGeometryFilterVisitorResult) obj; final Geometry currentGeom = currentResult.getGeometry(); final double currentArea = currentGeom.getArea(); if (finalResult.getGeometry().isEmpty()) { finalResult = currentResult; } else if (!Double.isInfinite(currentArea) && !Double.isNaN(currentArea)) { if (currentResult.matchPredicate(finalResult)) { finalResult = new ExtractGeometryFilterVisitorResult( finalResult.getGeometry().union(currentGeom), currentResult.getCompareOp()); } else { finalResult = new ExtractGeometryFilterVisitorResult( finalResult.getGeometry().union(currentGeom), null); finalResult = new ExtractGeometryFilterVisitorResult(finalResult.getGeometry(), null); if (finalResult.getGeometry().isEmpty()) { return new ExtractGeometryFilterVisitorResult(infinity(), null);
@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); }
new ExtractGeometryFilterVisitor(GeometryUtils.getDefaultCRS(), geometryAttribute), null); bbox = geoAndCompareOpData.getGeometry();
@Override public Object visitNullFilter(final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); } }
SceneFeatureIterator.SHAPE_ATTRIBUTE_NAME); Geometry geometry = geometryAndCompareOp.getGeometry(); if (geometry != null) {
@Override public Object visit(final PropertyIsGreaterThan filter, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }
GeometryUtils.getDefaultCRS(), SceneFeatureIterator.SHAPE_ATTRIBUTE_NAME); Geometry geometry = geometryAndCompareOp.getGeometry(); if (geometry != 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 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); }
@Override public Object visit(final Add expression, final Object data) { return new ExtractGeometryFilterVisitorResult(infinity(), null); }