break; case INTERSECTS: propertyName = ( (Intersects) operator ).getPropName(); geometry = ( (Intersects) operator ).getGeometry(); break; case OVERLAPS:
static OperatorFilter buildFilter( Operator operator, FeatureType ft, Envelope clickBox ) { if ( ft == null ) { if ( operator == null ) { return null; } return new OperatorFilter( operator ); } LinkedList<Operator> list = findOperators( ft, clickBox ); if ( list.size() > 1 ) { Or or = new Or( list.toArray( new Operator[list.size()] ) ); if ( operator == null ) { return new OperatorFilter( or ); } return new OperatorFilter( new And( operator, or ) ); } if ( list.isEmpty() ) { // obnoxious case where feature has no geometry properties (but features may have extra geometry props) if ( operator == null ) { return new OperatorFilter( new Intersects( null, clickBox ) ); } return new OperatorFilter( new And( operator, new Intersects( null, clickBox ) ) ); } if ( operator == null ) { return new OperatorFilter( list.get( 0 ) ); } return new OperatorFilter( new And( operator, list.get( 0 ) ) ); }
throws FilterEvaluationException { Expression param1 = getParam1(); if ( param1 != null ) { for ( TypedObjectNode paramValue : param1.evaluate( obj, xpathEvaluator ) ) { Geometry param1Value = checkGeometryOrNull( paramValue ); if ( param1Value != null ) { Geometry transformedGeom = getCompatibleGeometry( param1Value, geometry ); return transformedGeom.intersects( param1Value ); foundGeom = true; Geometry geom = (Geometry) prop.getValue(); Geometry transformedGeom = getCompatibleGeometry( geometry, geom ); if ( transformedGeom.intersects( geometry ) ) { return true; Envelope env = f.getEnvelope(); if ( env != null ) { Geometry g = getCompatibleGeometry( geometry, env ); if ( g.intersects( geometry ) ) { return true; if ( prop.getValue() instanceof Geometry ) { Geometry geom = (Geometry) prop.getValue(); Geometry transformedGeom = getCompatibleGeometry( geometry, geom ); if ( transformedGeom.intersects( geometry ) ) { return true;
case INTERSECTS: Intersects intersects = (Intersects) op; return new Intersects( copy( intersects.getPropName() ), intersects.getGeometry() ); case OVERLAPS: Overlaps overlaps = (Overlaps) op;
break; case INTERSECTS: geometry = ( (Intersects) operator ).getGeometry(); break; case OVERLAPS:
private static BBOX extractBBox( SpatialOperator oper ) { SubType type = oper.getSubType(); switch ( type ) { case BBOX: return (BBOX) oper; case CONTAINS: // Oracle does not like zero-extent bboxes if ( !( ( (Contains) oper ).getGeometry() instanceof Point ) ) return new BBOX( ( (Contains) oper ).getParam1(), ( (Contains) oper ).getGeometry().getEnvelope() ); return null; case CROSSES: return new BBOX( ( (Crosses) oper ).getParam1(), ( (Crosses) oper ).getGeometry().getEnvelope() ); case DWITHIN: // TOOD use enlarged bbox return null; case EQUALS: return new BBOX( ( (Equals) oper ).getParam1(), ( (Equals) oper ).getGeometry().getEnvelope() ); case INTERSECTS: return new BBOX( ( (Intersects) oper ).getParam1(), ( (Intersects) oper ).getGeometry().getEnvelope() ); case OVERLAPS: return new BBOX( ( (Overlaps) oper ).getParam1(), ( (Overlaps) oper ).getGeometry().getEnvelope() ); case WITHIN: return new BBOX( ( (Within) oper ).getParam1(), ( (Within) oper ).getGeometry().getEnvelope() ); default: { return null; } } }
Intersects intersects = (Intersects) op; builder.add( propNameExpr ).add( ".STIntersects(" ); builder.add( toProtoSQL( intersects.getGeometry(), storageCRS, srid ) ); builder.add( ")=1" ); break;
private static LinkedList<Operator> findOperators( FeatureType ft, Envelope clickBox ) { LinkedList<Operator> list = new LinkedList<Operator>(); for ( PropertyType pt : ft.getPropertyDeclarations() ) { if ( pt instanceof GeometryPropertyType && ( ( (GeometryPropertyType) pt ).getCoordinateDimension() == DIM_2 || ( (GeometryPropertyType) pt ).getCoordinateDimension() == DIM_2_OR_3 ) ) { list.add( new Intersects( new ValueReference( pt.getName() ), clickBox ) ); } } return list; }
builder.add( toProtoSQL( intersects.getGeometry(), storageCRS, srid ) ); builder.add( ")" ); break;
spatialOperator = new Intersects( param1, param2 ); break;
return new Equals( (Expression) os[0], (Geometry) os[1] ); case INTERSECTS: return new Intersects( (Expression) os[0], (Geometry) os[1] ); case OVERLAPS: return new Overlaps( (Expression) os[0], (Geometry) os[1] );
spatialOperator = new Intersects( param1, param2 ); break;
spatialOperator = new Intersects( param1, param2 ); break;