public Object getProperty(Object object, QName name) throws Exception { DistanceBufferOperator operator = (DistanceBufferOperator) object; Object property = OGCUtils.property(operator.getExpression1(), operator.getExpression2(), name); if (property != null) { return property; } if ("Distance".equals(name.getLocalPart())) { return new Double(operator.getDistance()); } return null; } }
public static Object buildDistanceBufferOperation( String geoOperation, DistanceBufferOperator filter, Object extraData, ExpressionToText visitor) { LOGGER.finer("exporting " + geoOperation); StringBuilder output = asStringBuilder(extraData); output.append(geoOperation).append("("); Expression expr = filter.getExpression1(); expr.accept(visitor, output); output.append(", "); filter.getExpression2().accept(visitor, output); output.append(", "); output.append(filter.getDistance()); output.append(", "); output.append(filter.getDistanceUnits()); output.append(")"); return output; }
/** * Converts the distance of the operator in meters, or returns the current value if there is no * units distance * * @param operator */ protected double getDistanceInMeters(DistanceBufferOperator operator) { double distance = operator.getDistance(); String units = operator.getDistanceUnits(); // no units or no SRID, no party, return value as-is if (units == null || UNITS_MAP.get(units.toLowerCase()) == null) { return distance; } double factor = UNITS_MAP.get(units.toLowerCase()); return distance * factor; }
void visitDistanceSpatialOperator( DistanceBufferOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) throws IOException { if ((filter instanceof DWithin && !swapped) || (filter instanceof Beyond && swapped)) { encodeIndexPredicate(property, geometry); property.accept(this, extraData); out.write(".ST_DWithin(new ST_Geometry("); geometry.accept(this, extraData); out.write("),"); out.write(Double.toString(filter.getDistance())); out.write(")"); } if ((filter instanceof DWithin && swapped) || (filter instanceof Beyond && !swapped)) { encodeIndexPredicate(property, geometry); property.accept(this, extraData); out.write(".ST_Distance(SYSSPATIAL.ST_Geometry("); geometry.accept(this, extraData); out.write(")) > "); out.write(Double.toString(filter.getDistance())); } }
/** * Returns the center of the reference geometry of the distance buffer operator, in case * * @param operator * @return */ protected Coordinate getReferenceGeometryCentroid(DistanceBufferOperator operator) { Geometry geom = operator.getExpression1().evaluate(null, Geometry.class); if (geom == null) { geom = operator.getExpression2().evaluate(null, Geometry.class); } if (geom == null) { return null; } return geom.getCentroid().getCoordinate(); }
protected void doSDODistance( BinarySpatialOperator filter, Expression e1, Expression e2, Object extraData) throws IOException { double distance = ((DistanceBufferOperator) filter).getDistance(); String unit = getSDOUnitFromOGCUnit(((DistanceBufferOperator) filter).getDistanceUnits()); String within = filter instanceof DWithin ? "TRUE" : "FALSE"; out.write("SDO_WITHIN_DISTANCE("); e1.accept(this, extraData); out.write(","); e2.accept(this, extraData); // encode the unit verbatim when available if (unit != null && !"".equals(unit.trim())) out.write(",'distance=" + distance + " unit=" + unit + "') = '" + within + "' "); else out.write(",'distance=" + distance + "') = '" + within + "' "); }
throw new RuntimeException("Unknown distance operator"); out.write(Double.toString(((DistanceBufferOperator) filter).getDistance())); } else if (filter instanceof BBOX) { out.write("MbrIntersects(");
if (Filters.getExpressionType(lf.getExpression1()) == org.geotools.filter.ExpressionType.ATTRIBUTE) { elems[0].getType() .encode(elems[0], lf.getExpression1(), output, hints); // prop name elems[1].getType() .encode( elems[1], lf.getExpression2().evaluate(null, Geometry.class), output, if (Filters.getExpressionType(lf.getExpression2()) == org.geotools.filter.ExpressionType.ATTRIBUTE) { elems[0].getType() .encode(elems[0], lf.getExpression2(), output, hints); // prop name elems[1].getType() .encode( elems[1], lf.getExpression1().evaluate(null, Geometry.class), output,
static List getProperties(DistanceBufferOperator op) { List l = new ArrayList(); l.add(distanceBufferOpProperty(op.getExpression1())); l.add(distanceBufferOpProperty(op.getExpression2())); l.add(new Object[] {new QName(FES.NAMESPACE, "Distance"), op.getDistance()}); return l; }
Object visitDistanceSpatialOperator( DistanceBufferOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) { try { String comparisonOperator = ") < "; if ((filter instanceof DWithin && swapped) || (filter instanceof Beyond && !swapped)) { comparisonOperator = ") > "; } out.write("db2gse.ST_Distance("); property.accept(this, extraData); out.write(","); geometry.accept(this, extraData); String distanceUnits = filter.getDistanceUnits(); if (isValidUnit(distanceUnits)) { out.write(",'METER'"); } out.write(comparisonOperator); out.write(toMeters(filter.getDistance(), filter.getDistanceUnits())); if (!isValidUnit(distanceUnits)) { addSelectivity(); // Selectivity clause can not be used with distance units } return extraData; } catch (IOException ex) { throw new RuntimeException(ex); } }
out.write(Double.toString(((DistanceBufferOperator) filter).getDistance())); } else {
public static Object buildDistanceBufferOperation(final String geoOperation, DistanceBufferOperator filter, Object extraData){ LOGGER.finer("exporting " + geoOperation); StringBuilder output = asStringBuilder(extraData); output.append(geoOperation).append("("); Expression expr = filter.getExpression1(); ExpressionToText visitor = new ExpressionToText(); expr.accept(visitor, output); output.append(", "); filter.getExpression2().accept(visitor, output); output.append(")"); return output; }
/** Converts a distance buffer op to an intersects againt the buffered input geometry */ private Object visitDistanceBufferOperator( DistanceBufferOperator filter, boolean truth, Object extraData) { // SDE can assert only one way, we need to invert from contains to within in case the // assertion is the other way around PropertyName property; Literal literal; { Expression expression1 = filter.getExpression1(); Expression expression2 = filter.getExpression2(); if (expression1 instanceof PropertyName && expression2 instanceof Literal) { property = (PropertyName) expression1; literal = (Literal) expression2; } else if (expression2 instanceof PropertyName && expression1 instanceof Literal) { property = (PropertyName) expression2; literal = (Literal) expression1; } else { // not supported throw new IllegalArgumentException( "expected propertyname/literal, got " + expression1 + "/" + expression2); } } final Geometry geom = literal.evaluate(null, Geometry.class); final double distance = filter.getDistance(); final Geometry buffer = geom.buffer(distance); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(); BinarySpatialOperator intersects = ff.intersects(property, ff.literal(buffer)); addSpatialFilter(intersects, SeFilter.METHOD_II_OR_ET, truth, extraData); return extraData; }
void visitDistanceSpatialOperator(DistanceBufferOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) throws IOException { if ((filter instanceof DWithin && !swapped) || (filter instanceof Beyond && swapped)) { out.write("ST_DWithin("); property.accept(delegate, extraData); out.write(","); geometry.accept(delegate, extraData); out.write(","); out.write(toMeters(filter.getDistance(), filter.getDistanceUnits())); out.write(")"); } if ((filter instanceof DWithin && swapped) || (filter instanceof Beyond && !swapped)) { out.write("ST_Distance("); property.accept(delegate, extraData); out.write(","); geometry.accept(delegate, extraData); out.write(") > "); out.write(Double.toString(filter.getDistance())); } }
throw new RuntimeException("Unknown distance operator"); out.write(Double.toString(((DistanceBufferOperator) filter).getDistance())); } else if (!(filter instanceof BBOX)) { if (filter instanceof Contains) {
String uri = getNamespace().toString(); if (Filters.getExpressionType(distanceFilter.getExpression1()) == ExpressionType.LITERAL_GEOMETRY) { Geometry geometry = distanceFilter.getExpression1().evaluate(null, Geometry.class); if (geometry.getUserData() != null) { Geometry geometry = distanceFilter.getExpression2().evaluate(null, Geometry.class); if (geometry.getUserData() != null) { output.characters("" + distanceFilter.getDistance()); output.endElement(element.getNamespace(), element.getName());
protected void visitDistanceSpatialOperator(DistanceBufferOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) { property.accept(delegate, extraData); key = (String) delegate.field; geometry.accept(delegate, extraData); final Geometry geo = delegate.currentGeometry; lat = geo.getCentroid().getY(); lon = geo.getCentroid().getX(); final double inputDistance = filter.getDistance(); final String inputUnits = filter.getDistanceUnits(); distance = Double.valueOf(toMeters(inputDistance, inputUnits)); delegate.queryBuilder = ImmutableMap.of("bool", ImmutableMap.of("must", MATCH_ALL, "filter", ImmutableMap.of("geo_distance", ImmutableMap.of("distance", distance+"m", key, ImmutableList.of(lon,lat))))); if ((filter instanceof DWithin && swapped) || (filter instanceof Beyond && !swapped)) { delegate.queryBuilder = ImmutableMap.of("bool", ImmutableMap.of("must_not", delegate.queryBuilder)); } }
return operator.getDistance(); e); return operator.getDistance();
public Object getProperty(Object object, QName name) throws Exception { DistanceBufferOperator operator = (DistanceBufferOperator) object; Object property = OGCUtils.property(operator.getExpression1(), operator.getExpression2(), name); if (property != null) { return property; } if ("Distance".equals(name.getLocalPart())) { return new Double(operator.getDistance()); } return null; } }
Object visitDistanceSpatialOperator(DistanceBufferOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) { try { if ((filter instanceof DWithin && !swapped) || (filter instanceof Beyond && swapped)) { out.write("db2gse.ST_Distance("); property.accept(this, extraData); out.write(","); geometry.accept(this, extraData); out.write(") < "); out.write(Double.toString(filter.getDistance())); } if ((filter instanceof DWithin && swapped) || (filter instanceof Beyond && !swapped)) { out.write("db2gse.ST_Distance("); property.accept(this, extraData); out.write(","); geometry.accept(this, extraData); out.write(") > "); out.write(Double.toString(filter.getDistance())); } return extraData; } catch (IOException ex) { throw new RuntimeException(ex); } }