geos::operation::valid::IsSimpleOp Class Reference

`#include <IsSimpleOp.h>`

## Public Member Functions

| IsSimpleOp (const geom::Geometry *geom)
| IsSimpleOp (const geom::Geometry &geom)
| IsSimpleOp (const geom::Geometry &geom, const algorithm::BoundaryNodeRule &p_boundaryNodeRule)
geom::CoordinateXY | getNonSimpleLocation (const geom::Geometry &geom)
void | setFindAllLocations (bool isFindAll)
bool | isSimple ()
geom::CoordinateXY | getNonSimpleLocation ()
const std::vector< geom::CoordinateXY > & | getNonSimpleLocations ()

## Static Public Member Functions

static bool | isSimple (const geom::Geometry &geom)
static bool | isSimple (const geom::Geometry *geom)

## Detailed Description

Tests whether a Geometry is simple as defined by the OGC SFS specification.

Simplicity is defined for each geom::Geometry type as follows:

- geom::Point geometries are simple.
- geom::MultiPoint geometries are simple if every point is unique
- geom::LineString geometries are simple if they do not self-intersect at interior points (i.e. points other than the endpoints).
- geom::MultiLineString geometries are simple if their elements are simple and they intersect only at points which are boundary points of both elements. (The notion of boundary points can be user-specified - see below).
- Polygonal geometries have no definition of simplicity. The isSimple code checks if all polygon rings are simple. (Note: this means that isSimple cannot be used to test for ALL self-intersections in Polygons. In order to check if a Polygonal geometry has self-intersections, use geom::Geometry::isValid()).
- geom::GeometryCollection geometries are simple if all their elements are simple.
- Empty geometries are simple

For linear 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.

Note that under the Mod-2 rule, closed LineStrings (rings) have no boundary. This means that an intersection at their endpoints makes the geometry non-simple. If it is required to test whether a set of LineStrings touch only at their endpoints, use BoundaryNodeRule::getBoundaryEndPoint(). For example, this can be used to validate that a collection of lines form a topologically valid linear network.

By default this class finds a single non-simple location. To find all non-simple locations, set setFindAllLocations(bool) before calling isSimple(), and retrieve the locations via getNonSimpleLocations(). This can be used to find all intersection points in a linear network.

See also
  BoundaryNodeRule

## Constructor & Destructor Documentation

## IsSimpleOp() [1/2]

geos::operation::valid::IsSimpleOp::IsSimpleOp | ( | const geom::Geometry & | geom | ) |

inline

Creates a simplicity checker using the default SFS Mod-2 Boundary Node Rule

Parameters

  geom | the geometry to test

## IsSimpleOp() [2/2]

geos::operation::valid::IsSimpleOp::IsSimpleOp | ( | const geom::Geometry & | geom,
|  | const algorithm::BoundaryNodeRule & | p_boundaryNodeRule )

inline

Creates a simplicity checker using a given `algorithm::BoundaryNodeRule`

Parameters

  geom | the geometry to test
  p_boundaryNodeRule | the boundary node rule to use.

## Member Function Documentation

## getNonSimpleLocation() [1/2]

geom::CoordinateXY geos::operation::valid::IsSimpleOp::getNonSimpleLocation | ( |  | ) |

Gets the coordinate for an location where the geometry fails to be simple. (i.e. where it has a non-boundary self-intersection).

Returns
  a coordinate for the location of the non-boundary self-intersection or null if the geometry is simple

## getNonSimpleLocation() [2/2]

geom::CoordinateXY geos::operation::valid::IsSimpleOp::getNonSimpleLocation | ( | const geom::Geometry & | geom | ) |

Gets a non-simple location in a geometry, if any.

Parameters

  geom | the input geometry

Returns
  a non-simple location, or null if the geometry is simple

## getNonSimpleLocations()

const std::vector< geom::CoordinateXY > & geos::operation::valid::IsSimpleOp::getNonSimpleLocations | ( |  | ) |

Gets all non-simple intersection locations.

Returns
  a list of the coordinates of non-simple locations

## isSimple() [1/2]

bool geos::operation::valid::IsSimpleOp::isSimple | ( |  | ) |

Tests whether the geometry is simple.

Returns
  true if the geometry is simple

## isSimple() [2/2]

bool geos::operation::valid::IsSimpleOp::isSimple | ( | const geom::Geometry & | geom | ) |

static

Tests whether a geometry is simple.

Parameters

  geom | the geometry to test

Returns
  true if the geometry is simple

References isSimple().

Referenced by isSimple().

## setFindAllLocations()

void geos::operation::valid::IsSimpleOp::setFindAllLocations | ( | bool | isFindAll | ) |

Sets whether all non-simple intersection points will be found.

Parameters

  isFindAll | whether to find all non-simple points

The documentation for this class was generated from the following file:

- IsSimpleOp.h