private static void export( SpatialOperator operator, XMLStreamWriter writer ) throws XMLStreamException, UnknownCRSException, TransformationException { QName elementName = spatialOperatorTypeToElementName.get( operator.getSubType() ); if ( elementName == null ) throw new IllegalArgumentException( "Encoding of spatial operator subtype " + operator.getSubType() + " is not supported yet!" ); writer.writeStartElement( elementName.getNamespaceURI(), elementName.getLocalPart() ); switch ( operator.getSubType() ) { case BBOX: geometry = ( (BBOX) operator ).getBoundingBox(); break; default: throw new IllegalArgumentException( "Encoding of spatial operator subtype " + operator.getSubType() + " is not supported yet!" ); export( operator.getParam1(), writer ); exportGeometry( geometry, gmlWriter ); exportDistance( distance, writer );
private static void addGeometries( Operator operator, List<Geometry> geometries ) { Operator.Type type = operator.getType(); switch ( type ) { case LOGICAL: LogicalOperator logicalOper = (LogicalOperator) operator; for ( Operator param : logicalOper.getParams() ) { addGeometries( param, geometries ); } break; case SPATIAL: SpatialOperator spatialOper = (SpatialOperator) operator; for ( Object param : spatialOper.getParams() ) { if ( param instanceof Geometry ) { geometries.add( (Geometry) param ); } } break; case COMPARISON: // nothing to do break; } }
GenericXMLElement xml = (GenericXMLElement) value; if ( xml.getChildren().isEmpty() ) { String msg = Messages.getMessage( "FILTER_EVALUATION_NOT_GEOMETRY", getType().name(), value ); throw new FilterEvaluationException( msg ); return (Geometry) maybeGeom; String msg = Messages.getMessage( "FILTER_EVALUATION_NOT_GEOMETRY", getType().name(), value ); throw new FilterEvaluationException( msg ); } else { String msg = Messages.getMessage( "FILTER_EVALUATION_NOT_GEOMETRY", getType().name(), value ); throw new FilterEvaluationException( msg );
SQLExpression propNameExpr = toProtoSQLSpatial( op.getPropName() ); if ( !propNameExpr.isSpatial() ) { String msg = "Cannot evaluate spatial operator on database. Targeted property name '" + op.getPropName() + "' does not denote a spatial column."; throw new FilterEvaluationException( msg ); int srid = propNameExpr.getSRID() != null ? Integer.parseInt( propNameExpr.getSRID() ) : 0; switch ( op.getSubType() ) { case BBOX: { BBOX bbox = (BBOX) op;
throws XMLStreamException, UnknownCRSException, TransformationException { QName elementName = spatialOperatorTypeToElementName.get( operator.getSubType() ); writer.writeStartElement( elementName.getNamespaceURI(), elementName.getLocalPart() ); Measure distance = null; switch ( operator.getSubType() ) {
private static SpatialOperator repair( SpatialOperator o, Map<String, QName> bindings, Set<QName> validNames ) { Object[] os = o.getParams(); for ( int i = 0; i < os.length; ++i ) { if ( os[i] instanceof Expression ) { switch ( o.getSubType() ) { case BBOX: return new BBOX( (Expression) os[0], (Envelope) os[1] );
SQLExpression propNameExpr = toProtoSQLSpatial( op.getPropName() ); if ( !propNameExpr.isSpatial() ) { String msg = "Cannot evaluate spatial operator on database. Targeted property name '" + op.getPropName() + "' does not denote a spatial column."; throw new InvalidParameterValueException( msg ); int srid = propNameExpr.getSRID() != null ? Integer.parseInt( propNameExpr.getSRID() ) : -1; switch ( op.getSubType() ) { case BBOX: { BBOX bbox = (BBOX) op;
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; } } }
case SPATIAL: GeometryFactory gf = new GeometryFactory(); switch ( ( (SpatialOperator) op ).getSubType() ) { case BBOX: BBOX bbox = (BBOX) op;
private static void addPropertyNames( Operator operator, List<ValueReference> propNames ) { Operator.Type type = operator.getType(); switch ( type ) { case COMPARISON: ComparisonOperator compOper = (ComparisonOperator) operator; for ( Expression expr : compOper.getParams() ) { addPropertyNames( expr, propNames ); } break; case LOGICAL: LogicalOperator logicalOper = (LogicalOperator) operator; for ( Operator param : logicalOper.getParams() ) { addPropertyNames( param, propNames ); } break; case SPATIAL: SpatialOperator spatialOper = (SpatialOperator) operator; for ( Object param : spatialOper.getParams() ) { if ( param instanceof Expression ) { addPropertyNames( (Expression) param, propNames ); } } break; } }