GEOS 3.13.1
|
Represents a ring of PolygonizeDirectedEdge which form a ring of a polygon. The ring may be either an outer shell or a hole. More...
#include <EdgeRing.h>
Public Member Functions | |
void | add (const PolygonizeDirectedEdge *de) |
Adds a DirectedEdge which is known to form part of this ring. | |
EdgeRing * | findEdgeRingContaining (const std::vector< EdgeRing * > &erList) |
Find the innermost enclosing shell EdgeRing containing this, if any. | |
EdgeRing (const geom::GeometryFactory *newFactory) | |
void | build (PolygonizeDirectedEdge *startDE) |
void | computeHole () |
const DeList & | getEdges () const |
bool | isHole () const |
Tests whether this ring is a hole. | |
bool | isIncludedSet () const |
bool | isIncluded () const |
void | setIncluded (bool included) |
bool | isProcessed () const |
void | setProcessed (bool processed) |
void | setShell (EdgeRing *shellRing) |
Sets the containing shell ring of a ring that has been determined to be a hole. | |
bool | hasShell () const |
Tests whether this ring has a shell assigned to it. | |
EdgeRing * | getShell () |
Gets the shell for this ring. The shell is the ring itself if it is not a hole, otherwise it is the parent shell. | |
bool | isOuterHole () const |
Tests whether this ring is an outer hole. A hole is an outer hole if it is not contained by any shell. | |
bool | isOuterShell () const |
Tests whether this ring is an outer shell. | |
EdgeRing * | getOuterHole () const |
Gets the outer hole of a shell, if it has one. An outer hole is one that is not contained in any other shell. | |
void | updateIncludedRecursive () |
Updates the included status for currently non-included shells based on whether they are adjacent to an included shell. | |
void | addHole (geom::LinearRing *hole) |
Adds a hole to the polygon formed by this ring. | |
void | addHole (EdgeRing *holeER) |
std::unique_ptr< geom::Polygon > | getPolygon () |
Computes the Polygon formed by this ring and any contained holes. | |
bool | isValid () const |
Tests if the LinearRing ring formed by this edge ring is topologically valid. | |
void | computeValid () |
std::unique_ptr< geom::LineString > | getLineString () |
Gets the coordinates for this ring as a LineString. | |
geom::LinearRing * | getRingInternal () |
Returns this ring as a LinearRing, or null if an Exception occurs while creating it (such as a topology problem). | |
std::unique_ptr< geom::LinearRing > | getRingOwnership () |
Returns this ring as a LinearRing, or null if an Exception occurs while creating it (such as a topology problem). | |
bool | isInRing (const geom::Coordinate &pt) |
Static Public Member Functions | |
static std::vector< PolygonizeDirectedEdge * > | findDirEdgesInRing (PolygonizeDirectedEdge *startDE) |
Traverses a ring of DirectedEdges, accumulating them into a list. | |
static const geom::Coordinate & | ptNotInList (const geom::CoordinateSequence *testPts, const geom::CoordinateSequence *pts) |
Finds a point in a list of points which is not contained in another list of points. | |
static bool | isInList (const geom::Coordinate &pt, const geom::CoordinateSequence *pts) |
Tests whether a given point is in an array of points. Uses a value-based test. |
Represents a ring of PolygonizeDirectedEdge which form a ring of a polygon. The ring may be either an outer shell or a hole.
void geos::operation::polygonize::EdgeRing::add | ( | const PolygonizeDirectedEdge * | de | ) |
Adds a DirectedEdge which is known to form part of this ring.
de | the DirectedEdge to add. Ownership to the caller. |
void geos::operation::polygonize::EdgeRing::addHole | ( | geom::LinearRing * | hole | ) |
Adds a hole to the polygon formed by this ring.
hole | the LinearRing forming the hole. |
References addHole().
Referenced by addHole().
|
static |
Traverses a ring of DirectedEdges, accumulating them into a list.
This assumes that all dangling directed edges have been removed from the graph, so that there is always a next dirEdge.
startDE | the DirectedEdge to start traversing at |
EdgeRing * geos::operation::polygonize::EdgeRing::findEdgeRingContaining | ( | const std::vector< EdgeRing * > & | erList | ) |
Find the innermost enclosing shell EdgeRing containing this, if any.
The innermost enclosing ring is the smallest enclosing ring. The algorithm used depends on the fact that:
ring A contains ring B iff envelope(ring A) contains envelope(ring B)
This routine is only safe to use if the chosen point of the hole is known to be properly contained in a shell (which is guaranteed to be the case if the hole does not touch its shell)
std::unique_ptr< geom::LineString > geos::operation::polygonize::EdgeRing::getLineString | ( | ) |
Gets the coordinates for this ring as a LineString.
Used to return the coordinates in this ring as a valid geometry, when it has been detected that the ring is topologically invalid.
EdgeRing * geos::operation::polygonize::EdgeRing::getOuterHole | ( | ) | const |
Gets the outer hole of a shell, if it has one. An outer hole is one that is not contained in any other shell.
Each disjoint connected group of shells is surrounded by an outer hole.
Referenced by isOuterShell().
std::unique_ptr< geom::Polygon > geos::operation::polygonize::EdgeRing::getPolygon | ( | ) |
geom::LinearRing * geos::operation::polygonize::EdgeRing::getRingInternal | ( | ) |
Returns this ring as a LinearRing, or null if an Exception occurs while creating it (such as a topology problem).
Ownership of ring is retained by the object. Details of problems are written to standard output.
std::unique_ptr< geom::LinearRing > geos::operation::polygonize::EdgeRing::getRingOwnership | ( | ) |
Returns this ring as a LinearRing, or null if an Exception occurs while creating it (such as a topology problem).
Details of problems are written to standard output. Caller gets ownership of ring.
References geos::geom::EXTERIOR.
|
inline |
Gets the shell for this ring. The shell is the ring itself if it is not a hole, otherwise it is the parent shell.
References isHole().
|
inline |
Tests whether this ring has a shell assigned to it.
Referenced by isOuterHole().
|
inline |
Tests whether this ring is a hole.
Due to the way the edges in the polyongization graph are linked, a ring is a hole if it is oriented counter-clockwise.
true
if this ring is a hole Referenced by getShell(), and isOuterHole().
|
static |
Tests whether a given point is in an array of points. Uses a value-based test.
pt | a Coordinate for the test point |
pts | an array of Coordinate to test |
true
if the point is in the array
|
inline |
Tests whether this ring is an outer hole. A hole is an outer hole if it is not contained by any shell.
References hasShell(), and isHole().
|
inline |
Tests whether this ring is an outer shell.
References getOuterHole().
|
static |
Finds a point in a list of points which is not contained in another list of points.
testPts | the CoordinateSequence to test |
pts | the CoordinateSequence to test the input points against |
testPts
which is not in pts
, or Coordinate::nullCoord
|
inline |
Sets the containing shell ring of a ring that has been determined to be a hole.
shellRing | the shell ring |