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 ) ) ); }
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; }
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;
case INTERSECTS: Intersects intersects = (Intersects) op; return new Intersects( copy( intersects.getPropName() ), intersects.getGeometry() ); case OVERLAPS: Overlaps overlaps = (Overlaps) op;