Package org.geotools.filter.spatial
Class AbstractPreparedGeometryFilter
- Object
-
- FilterAbstract
-
- AbstractFilter
-
- BinaryComparisonAbstract
-
- GeometryFilterImpl
-
- AbstractPreparedGeometryFilter
-
- All Implemented Interfaces:
Filter
,MultiValuedFilter
,BinarySpatialOperator
,SpatialOperator
,FilterType
- 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 theAbstractPreparedGeometryFilter.Literals
enumerated value that indicates if:- NEITHER ({@link Literals#NEITHER) of the expressions are literal and is a JTS Geometry (also non-null)
- BOTH (
AbstractPreparedGeometryFilter.Literals.BOTH
) expressions are literals and is a JTS Geometry (also non-null) - the LEFT (
AbstractPreparedGeometryFilter.Literals.LEFT
) expression (Expression1) is a literal and is a JTS Geometry (also non-null) - or the RIGHT (
AbstractPreparedGeometryFilter.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
basicEvaluate(Geometry, Geometry)
.The method
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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
AbstractPreparedGeometryFilter.Literals
Constant that identifies which expressions are Literal and JTS Geometries-
Nested classes/interfaces inherited from interface MultiValuedFilter
MultiValuedFilter.MatchAction
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
cacheValue
If both expressions are literals the value will never change.protected PreparedGeometry
leftPreppedGeom
The PreparedGeometry for the left Geometry.protected AbstractPreparedGeometryFilter.Literals
literals
Indicates which expressions areLiteral
sprotected PreparedGeometry
rightPreppedGeom
The PreparedGeometry for the right Geometry.-
Fields inherited from class GeometryFilterImpl
matchAction
-
Fields inherited from class BinaryComparisonAbstract
expression1, expression2
-
Fields inherited from class AbstractFilter
LOGGER
-
Fields inherited from interface FilterType
ALL, 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, NONE, NULL
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractPreparedGeometryFilter(Expression e1, Expression e2)
protected
AbstractPreparedGeometryFilter(Expression e1, Expression e2, MultiValuedFilter.MatchAction matchAction)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract boolean
basicEvaluate(Geometry left, Geometry right)
Performs the calculation on the two geometries.void
setExpression1(Expression expression)
void
setExpression2(Expression expression)
-
Methods inherited from class GeometryFilterImpl
equals, evaluate, evaluateInternal, getGeometries, getMatchAction, hashCode, toString
-
Methods inherited from class BinaryComparisonAbstract
comparable, eval, eval, getExpression1, getExpression2, isMatchingCase
-
Methods inherited from class AbstractFilter
isCompareFilter, isGeometryDistanceFilter, isGeometryFilter, isLogicFilter, isMathFilter, isSimpleFilter
-
Methods inherited from class FilterAbstract
accepts, eval, eval
-
Methods inherited from interface BinarySpatialOperator
getExpression1, getExpression2
-
-
-
-
Field Detail
-
literals
protected AbstractPreparedGeometryFilter.Literals literals
Indicates which expressions areLiteral
s
-
leftPreppedGeom
protected PreparedGeometry leftPreppedGeom
The PreparedGeometry for the left Geometry. Null if the left geometry is not aLiteral
-
rightPreppedGeom
protected PreparedGeometry rightPreppedGeom
The PreparedGeometry for the right Geometry. Null if the right geometry is not aLiteral
-
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.
-
-
Constructor Detail
-
AbstractPreparedGeometryFilter
protected AbstractPreparedGeometryFilter(Expression e1, Expression e2)
-
AbstractPreparedGeometryFilter
protected AbstractPreparedGeometryFilter(Expression e1, Expression e2, MultiValuedFilter.MatchAction matchAction)
-
-
Method Detail
-
setExpression1
public void setExpression1(Expression expression)
- Overrides:
setExpression1
in classBinaryComparisonAbstract
-
setExpression2
public void setExpression2(Expression expression)
- Overrides:
setExpression2
in classBinaryComparisonAbstract
-
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
-
-