21 #include <geos/algorithm/LineIntersector.h> 22 #include <geos/algorithm/Orientation.h> 23 #include <geos/geom/Coordinate.h> 24 #include <geos/geom/CoordinateArraySequence.h> 25 #include <geos/geom/CoordinateSequence.h> 26 #include <geos/geom/Envelope.h> 27 #include <geos/geom/Geometry.h> 28 #include <geos/geom/GeometryCollection.h> 29 #include <geos/geom/LinearRing.h> 30 #include <geos/geom/LineString.h> 31 #include <geos/geom/MultiLineString.h> 32 #include <geos/geom/MultiPolygon.h> 33 #include <geos/geom/Polygon.h> 34 #include <geos/noding/IntersectionAdder.h> 35 #include <geos/noding/MCIndexNoder.h> 36 #include <geos/noding/Noder.h> 37 #include <geos/noding/NodedSegmentString.h> 38 #include <geos/noding/SegmentString.h> 39 #include <geos/noding/ValidatingNoder.h> 40 #include <geos/noding/snapround/SnapRoundingNoder.h> 41 #include <geos/operation/overlayng/Edge.h> 42 #include <geos/operation/overlayng/EdgeSourceInfo.h> 43 #include <geos/operation/overlayng/InputGeometry.h> 44 #include <geos/operation/overlayng/LineLimiter.h> 45 #include <geos/operation/overlayng/OverlayUtil.h> 46 #include <geos/operation/overlayng/RingClipper.h> 47 #include <geos/operation/valid/RepeatedPointRemover.h> 50 #include <geos/export.h> 85 static constexpr
int MIN_LIMIT_PTS = 20;
86 static constexpr
bool IS_NODING_VALIDATED =
true;
90 std::unique_ptr<std::vector<SegmentString*>> inputEdges;
92 std::array<bool, 2> hasEdges;
94 std::unique_ptr<RingClipper> clipper;
95 std::unique_ptr<LineLimiter> limiter;
100 std::unique_ptr<Noder> internalNoder;
101 std::unique_ptr<Noder> spareInternalNoder;
103 std::deque<EdgeSourceInfo> edgeSourceInfoQue;
104 std::deque<Edge> edgeQue;
115 static std::unique_ptr<Noder> createFixedPrecisionNoder(
const PrecisionModel* pm);
116 std::unique_ptr<Noder> createFloatingPrecisionNoder(
bool doValidation);
120 void addGeometryCollection(
const GeometryCollection* gc, uint8_t geomIndex,
int expectedDim);
121 void addPolygon(
const Polygon* poly, uint8_t geomIndex);
122 void addPolygonRing(
const LinearRing* ring,
bool isHole, uint8_t geomIndex);
123 void addLine(
const LineString* line, uint8_t geomIndex);
124 void addLine(std::unique_ptr<CoordinateArraySequence>& pts, uint8_t geomIndex);
125 void addEdge(std::unique_ptr<std::vector<Coordinate>> pts,
const EdgeSourceInfo* info);
126 void addEdge(std::unique_ptr<CoordinateArraySequence>& cas,
const EdgeSourceInfo* info);
129 const EdgeSourceInfo* createEdgeSourceInfo(uint8_t index,
int depthDelta,
bool isHole);
136 bool isClippedCompletely(
const Envelope* env);
143 bool isToBeLimited(
const LineString* line)
const;
150 std::vector<std::unique_ptr<CoordinateArraySequence>>& limit(
const LineString* line);
166 std::unique_ptr<CoordinateArraySequence> clip(
const LinearRing* line);
175 static std::unique_ptr<CoordinateArraySequence> removeRepeatedPoints(
const LineString* line);
177 static int computeDepthDelta(
const LinearRing* ring,
bool isHole);
179 void add(
const Geometry* g, uint8_t geomIndex);
187 std::vector<Edge*> node(std::vector<SegmentString*>* segStrings);
188 std::vector<Edge*> createEdges(std::vector<SegmentString*>* segStrings);
201 , customNoder(p_customNoder)
202 , hasEdges{{
false,
false}}
214 void setClipEnvelope(
const Envelope* clipEnv);
229 bool hasEdgesFor(uint8_t geomIndex)
const;
Definition: EdgeSourceInfo.h:38
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:58
An interface for classes which represent a sequence of contiguous line segments.
Definition: SegmentString.h:45
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:90
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:186
Definition: SnapRoundingNoder.h:71
Definition: LineString.h:66
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition: LineIntersector.h:50
Represents a linear polygon, which may include holes.
Definition: Polygon.h:61
Computes the intersections between two line segments in SegmentString and adds them to each string...
Definition: IntersectionAdder.h:54
Classes to compute nodings for arrangements of line segments and line segment sequences.
Definition: PreparedPolygon.h:30
Represents a collection of heterogeneous Geometry objects.
Definition: GeometryCollection.h:52
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25
Computes all intersections between segments in a set of SegmentString.
Definition: Noder.h:46
EdgeNodingBuilder(const PrecisionModel *p_pm, Noder *p_customNoder)
Definition: EdgeNodingBuilder.h:198
Models an OGC SFS LinearRing. A LinearRing is a LineString which is both closed and simple...
Definition: LinearRing.h:55
Definition: EdgeNodingBuilder.h:80