24#include <geos/export.h>
26#include <unordered_map>
30#include <geos/geom/Coordinate.h>
31#include <geos/geom/CoordinateSequence.h>
32#include <geos/geomgraph/PlanarGraph.h>
33#include <geos/geomgraph/index/SegmentIntersector.h>
34#include <geos/geom/LineString.h>
38#pragma warning(disable: 4251)
71class GEOS_DLL GeometryGraph final:
public PlanarGraph {
72 using PlanarGraph::add;
87 std::unordered_map<const geom::LineString*, Edge*> lineEdgeMap;
93 bool useBoundaryDeterminationRule;
104 std::unique_ptr< geom::CoordinateSequence > boundaryPoints;
106 std::unique_ptr< std::vector<Node*> > boundaryNodes;
108 bool hasTooFewPointsVar;
139 void insertBoundaryPoint(uint8_t p_argIndex,
const geom::Coordinate& coord);
141 void addSelfIntersectionNodes(uint8_t p_argIndex);
150 void addSelfIntersectionNode(uint8_t p_argIndex,
154 GeometryGraph(
const GeometryGraph& other) =
delete;
155 GeometryGraph& operator=(
const GeometryGraph& rhs) =
delete;
159 static bool isInBoundary(
int boundaryCount);
167 GeometryGraph(uint8_t newArgIndex,
const geom::Geometry* newParentGeom);
169 GeometryGraph(uint8_t newArgIndex,
const geom::Geometry* newParentGeom,
172 ~GeometryGraph()
override {};
182 nodes->getBoundaryNodes(
static_cast<uint8_t
>(argIndex), bdyNodes);
185 std::vector<Node*>* getBoundaryNodes();
192 void computeSplitEdges(std::vector<Edge*>* edgelist);
194 void addEdge(
Edge* e);
212 std::unique_ptr<index::SegmentIntersector>
215 bool computeRingSelfNodes,
223 std::unique_ptr<index::SegmentIntersector> computeSelfNodes(
227 std::unique_ptr<index::SegmentIntersector> computeEdgeIntersections(
GeometryGraph* g,
231 std::vector<Edge*>* getEdges();
233 bool hasTooFewPoints();
238 getBoundaryNodeRule()
const
240 return boundaryNodeRule;
An interface for rules which determine whether node points which are in boundaries of lineal geometry...
Definition BoundaryNodeRule.h:52
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition LineIntersector.h:53
The internal representation of a list of coordinates inside a Geometry.
Definition CoordinateSequence.h:56
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition Envelope.h:59
Represents a collection of heterogeneous Geometry objects.
Definition GeometryCollection.h:51
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:197
Definition LineString.h:66
Models an OGC SFS LinearRing. A LinearRing is a LineString which is both closed and simple.
Definition LinearRing.h:54
Represents a linear polygon, which may include holes.
Definition Polygon.h:61
Definition geomgraph/Edge.h:63
A GeometryGraph is a graph that models a given Geometry.
Definition GeometryGraph.h:71
geom::CoordinateSequence * getBoundaryPoints()
Returned object is owned by this GeometryGraph.
std::unique_ptr< index::SegmentIntersector > computeSelfNodes(algorithm::LineIntersector *li, bool computeRingSelfNodes, const geom::Envelope *env=nullptr)
Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection test...
Definition GeometryGraph.h:213
void getBoundaryNodes(std::vector< Node * > &bdyNodes)
Returned object is owned by this GeometryGraph.
Definition GeometryGraph.h:180
The node component of a geometry graph.
Definition geomgraph/Node.h:59
Edge * findEdge(const geom::Coordinate &p0, const geom::Coordinate &p1)
Returns the edge whose first two coordinates are p0 and p1.
An EdgeSetIntersector computes all the intersections between the edges in the set.
Definition geomgraph/index/EdgeSetIntersector.h:40
Contains classes and interfaces implementing fundamental computational geometry algorithms.
Definition Angle.h:32
Location
Constants representing the location of a point relative to a geometry.
Definition Location.h:32
Contains classes that implement indexes for performing noding on geometry graph edges.
Definition geomgraph/Edge.h:53
Contains classes that implement topology graphs.
Definition Depth.h:31
Basic namespace for all GEOS functionalities.
Definition geos.h:39