isCrosses method
Tests whether this geometry crosses the specified geometry.
The crosses
predicate has the following equivalent definitions:
- The geometries have some but not all interior points in common.
- The DE-9IM Intersection Matrix for the two geometries is
- T*T****** (for P/L, P/A, and L/A situations)
- T*****T** (for L/P, L/A, and A/L situations)
- 0******** (for L/L situations)
false
.
The SFS defined this predicate only for P/L, P/A, L/L, and L/A situations. JTS extends the definition to apply to L/P, A/P and A/L situations as well. This makes the relation symmetric.
@param dimensionOfGeometryA the dimension of the first Geometry
@param dimensionOfGeometryB the dimension of the second Geometry
@return true
if the two Geometry
s
related by this IntersectionMatrix
cross.
Implementation
bool isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) {
if ((dimensionOfGeometryA == Dimension.P &&
dimensionOfGeometryB == Dimension.L) ||
(dimensionOfGeometryA == Dimension.P &&
dimensionOfGeometryB == Dimension.A) ||
(dimensionOfGeometryA == Dimension.L &&
dimensionOfGeometryB == Dimension.A)) {
return isTrue(matrix[Location.INTERIOR][Location.INTERIOR]) &&
isTrue(matrix[Location.INTERIOR][Location.EXTERIOR]);
}
if ((dimensionOfGeometryA == Dimension.L &&
dimensionOfGeometryB == Dimension.P) ||
(dimensionOfGeometryA == Dimension.A &&
dimensionOfGeometryB == Dimension.P) ||
(dimensionOfGeometryA == Dimension.A &&
dimensionOfGeometryB == Dimension.L)) {
return isTrue(matrix[Location.INTERIOR][Location.INTERIOR]) &&
isTrue(matrix[Location.EXTERIOR][Location.INTERIOR]);
}
if (dimensionOfGeometryA == Dimension.L &&
dimensionOfGeometryB == Dimension.L) {
return matrix[Location.INTERIOR][Location.INTERIOR] == 0;
}
return false;
}