@Override public FilterToSQL createFilterToSQL() { return new H2FilterToSQL(); }
@Override protected Object visitBinarySpatialOperator( BinarySpatialOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) { return visitBinarySpatialOperator( filter, (Expression) property, (Expression) geometry, swapped, extraData); }
throw new RuntimeException("Unknown distance operator"); distance = getDistanceInNativeUnits((DistanceBufferOperator) filter); out.write(Double.toString(distance)); } else if (filter instanceof BBOX) {
@Override protected void visitLiteralGeometry(Literal expression) throws IOException { Geometry g = (Geometry) evaluateLiteral(expression, Geometry.class); if (g instanceof LinearRing) { // WKT does not support linear rings g = g.getFactory().createLineString(((LinearRing) g).getCoordinateSequence()); } out.write("ST_GeomFromText('" + g.toText() + "', " + currentSRID + ")"); }
@Override protected void visitLiteralGeometry(Literal expression) throws IOException { Geometry g = (Geometry) evaluateLiteral(expression, Geometry.class); if (g instanceof LinearRing) { //WKT does not support linear rings g = g.getFactory().createLineString(((LinearRing) g).getCoordinateSequence()); } out.write( "ST_GeomFromText('"+g.toText()+"', "+currentSRID+")"); }
@Override protected Object visitBinarySpatialOperator(BinarySpatialOperator filter, PropertyName property, Literal geometry, boolean swapped, Object extraData) { return visitBinarySpatialOperator(filter, (Expression) property, (Expression) geometry, swapped, extraData); }
@Override public FilterToSQL createFilterToSQL() { return new H2FilterToSQL(); } }
protected Object visitBinarySpatialOperator(BinarySpatialOperator filter, Expression e1, Expression e2, boolean swapped, Object extraData) { try { if (filter instanceof DistanceBufferOperator) { out.write("ST_Distance("); e1.accept(this, extraData); out.write(", "); e2.accept(this, extraData); out.write(")"); if (filter instanceof DWithin) { out.write("<"); } else if (filter instanceof Beyond) { out.write(">"); } else { throw new RuntimeException("Unknown distance operator"); } out.write(Double.toString(((DistanceBufferOperator)filter).getDistance())); } else if (filter instanceof BBOX) { //TODO: make a loose bounding box parameter out.write("ST_Intersects("); e1.accept(this, extraData); out.write(","); e2.accept(this, extraData); out.write(")"); }