org.geotools.filter.spatial
Class AbstractPreparedGeometryFilter
Object
FilterAbstract
AbstractFilter
BinaryComparisonAbstract
GeometryFilterImpl
AbstractPreparedGeometryFilter
- All Implemented Interfaces:
- FilterType, GeometryFilter, BinaryComparisonOperator, Filter, BinarySpatialOperator, SpatialOperator
- Direct Known Subclasses:
- BBOXImpl, ContainsImpl, DisjointImpl, IntersectsImpl, WithinImpl
public abstract class AbstractPreparedGeometryFilter
- extends GeometryFilterImpl
A base class for GeometryFilters that will use PreparedGeometries when the Expression
is a Literal Expression.
This class determines when the expressions are set which expressions are literals. The protected
field literals
contains the AbstractPreparedGeometryFilter.Literals
enumerated value that indicates if:
- NEITHER (Literals#NEITHER) of the expressions are literal and is a JTS Geometry (also non-null)
- BOTH ({@link Literals#BOTH}) expressions are literals and is a JTS Geometry (also non-null)
- the LEFT ({@link Literals#LEFT}) expression (Expression1) is a literal and is a JTS Geometry (also non-null)
- or the RIGHT ({@link Literals#RIGHT}) expression (Expression2) is a literal and is a JTS Geometry (also non-null)
If BOTH of the expressions are literals then a cached value is generated by calling {@link #basicEvaluate(Geometry, Geometry)}.
The method {@link #basicEvaluate(Geometry, Geometry)} is required to be implemented so that a cached value can be generated in the case
that both expressions are literals
Example usage for intersects filter:
public boolean evaluate(Object feature) {
if (feature instanceof SimpleFeature
&& !validate((SimpleFeature) feature)) {
// we could not obtain a geometry for both left and right hand sides
// so default to false
return false;
}
Geometry left;
Geometry right;
switch (literals) {
case BOTH:
return cacheValue;
case RIGHT: {
return rightPreppedGeom.intersects(getLeftGeometry(feature));
}
case LEFT: {
return leftPreppedGeom.intersects(getRightGeometry(feature));
}
default: {
left = getLeftGeometry(feature);
right = getRightGeometry(feature);
return basicEvaluate(left, right);
}
}
}
protected final boolean basicEvaluate(Geometry left, Geometry right) {
Envelope envLeft = left.getEnvelopeInternal();
Envelope envRight = right.getEnvelopeInternal();
return envRight.intersects(envLeft) && left.intersects(right);
}
- Author:
- jesse
- Module:
modules/library/main (gt-main.jar)
Fields inherited from interface FilterType |
BETWEEN, COMPARE_EQUALS, COMPARE_GREATER_THAN, COMPARE_GREATER_THAN_EQUAL, COMPARE_LESS_THAN, COMPARE_LESS_THAN_EQUAL, COMPARE_NOT_EQUALS, FID, GEOMETRY_BBOX, GEOMETRY_BEYOND, GEOMETRY_CONTAINS, GEOMETRY_CROSSES, GEOMETRY_DISJOINT, GEOMETRY_DWITHIN, GEOMETRY_EQUALS, GEOMETRY_INTERSECTS, GEOMETRY_OVERLAPS, GEOMETRY_TOUCHES, GEOMETRY_WITHIN, LIKE, LOGIC_AND, LOGIC_NOT, LOGIC_OR, NULL |
Methods inherited from class GeometryFilterImpl |
addLeftGeometry, addRightGeometry, equals, evaluate, getLeftGeometry, getLeftGeometry, getRightGeometry, getRightGeometry, hashCode, toString, validate |
Methods inherited from interface BinarySpatialOperator |
getExpression1, getExpression2 |
literals
protected AbstractPreparedGeometryFilter.Literals literals
- Indicates which expressions are
Literal
s
leftPreppedGeom
protected PreparedGeometry leftPreppedGeom
- The PreparedGeometry for the left Geometry. Null if the left geometry is not a
Literal
rightPreppedGeom
protected PreparedGeometry rightPreppedGeom
- The PreparedGeometry for the right Geometry. Null if the right geometry is not a
Literal
cacheValue
protected boolean cacheValue
- If both expressions are literals the value will never change. In that
case this field is that calculated value. It is false otherwise.
AbstractPreparedGeometryFilter
protected AbstractPreparedGeometryFilter(FilterFactory factory,
Expression e1,
Expression e2)
setExpression1
public void setExpression1(Expression expression)
- Overrides:
setExpression1
in class GeometryFilterImpl
setExpression2
public void setExpression2(Expression expression)
- Overrides:
setExpression2
in class GeometryFilterImpl
basicEvaluate
protected abstract boolean basicEvaluate(Geometry left,
Geometry right)
- Performs the calculation on the two geometries. This is used to calculate the cached value
in the case that both geometries are Literals. But in practice it is useful to extract this functionality
into its own method.
- Parameters:
left
- the geometry on the left of the equations (the geometry obtained from evaluating Expression1)right
- the geometry on the right of the equations (the geometry obtained from evaluating Expression2)
- Returns:
- true if the filter evaluates to true for the two geometries
Copyright © 1996-2010 Geotools. All Rights Reserved.