Tests whether a
Geometry is simple. In general, the SFS specification of simplicity follows the rule:
A Geometry is simple if and only if the only self-intersections are at boundary points.
Simplicity is defined for each Geometry type as follows:
Polygonal geometries are simple by definition, so isSimple trivially returns true. (Note: this means that isSimple cannot be used to test for (invalid) self-intersections in Polygons. In order to check if a Polygonal geometry has self-intersections, use Geometry.isValid()
).
Linear geometries are simple iff they do not self-intersect at interior points (i.e. points other than boundary points). This is equivalent to saying that no two linear components satisfy the SFS Geometry.touches(Geometry)
predicate.
Zero-dimensional (point) geometries are simple if and only if they have no repeated points.
Empty geometries are always simple, by definition
For
Lineal geometries the evaluation of simplicity can be customized by supplying a
BoundaryNodeRule to define how boundary points are determined. The default is the SFS-standard
BoundaryNodeRule.MOD2_BOUNDARY_RULE
. Note that under the
Mod-2 rule, closed
LineStrings (rings) will never satisfy the
touches predicate at their endpoints, since these are interior points, not boundary points. If it is required to test whether a set of
LineStrings touch only at their endpoints, use
IsSimpleOp with
BoundaryNodeRule.ENDPOINT_BOUNDARY_RULE
. For example, this can be used to validate that a set of lines form a topologically valid linear network.
See also:
BoundaryNodeRule
Other
version: 1.7
public IsSimpleOp()
Creates a simplicity checker using the default SFS Mod-2 Boundary Node Rule
Gets a coordinate for the location where the geometry fails to be simple. (i.e. where it has a non-boundary self-intersection).
isSimple must be called before this method is called.
Returns:
a coordinate for the location of the non-boundary self-intersection or null if the geometry is simple