/** * 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; }
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 + "' "); }
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; }
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); } }
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())); } }
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)); } }