52class GEOS_DLL CoverageRingEdges {
64 const std::vector<const Geometry*>& m_coverage;
65 std::map<const LinearRing*, std::vector<CoverageEdge*>> m_ringEdgesMap;
66 std::vector<CoverageEdge*> m_edges;
67 std::vector<std::unique_ptr<CoverageEdge>> m_edgeStore;
70 CoverageRingEdges(
const CoverageRingEdges&) =
delete;
71 CoverageRingEdges& operator=(
const CoverageRingEdges&) =
delete;
75 CoverageRingEdges(
const std::vector<const Geometry*>& coverage)
76 : m_coverage(coverage)
82 std::vector<CoverageEdge*>& getEdges()
94 std::size_t ringCount)
const;
109 const LinearRing* ring,
110 Coordinate::UnorderedSet& nodes,
111 LineSegment::UnorderedSet& boundarySegs,
112 std::map<LineSegment, CoverageEdge*>& uniqueEdgeMap);
114 void addBoundaryInnerNodes(
115 const LinearRing* ring,
116 LineSegment::UnorderedSet& boundarySegs,
117 Coordinate::UnorderedSet& nodes);
119 std::vector<CoverageEdge*> extractRingEdges(
120 const LinearRing* ring,
121 std::map<LineSegment, CoverageEdge*>& uniqueEdgeMap,
122 Coordinate::UnorderedSet& nodes);
125 const CoordinateSequence& ring,
126 std::map<LineSegment, CoverageEdge*>& uniqueEdgeMap);
129 const CoordinateSequence& ring,
130 std::size_t start, std::size_t end,
131 std::map<LineSegment, CoverageEdge*>& uniqueEdgeMap);
133 std::size_t findNextNodeIndex(
134 const CoordinateSequence& ring,
136 Coordinate::UnorderedSet& nodes)
const;
138 static std::size_t next(
140 const CoordinateSequence& ring);
142 Coordinate::UnorderedSet findMultiRingNodes(
143 const std::vector<const Geometry*>& coverage);
145 Coordinate::UnorderedSet findBoundaryNodes(
146 LineSegment::UnorderedSet& lineSegments);
148 std::unique_ptr<Geometry> buildPolygonal(
149 const Geometry*
geom)
const;
151 std::unique_ptr<Geometry> buildMultiPolygon(
152 const MultiPolygon*
geom)
const;
154 std::unique_ptr<Polygon> buildPolygon(
155 const Polygon* polygon)
const;
157 std::unique_ptr<LinearRing> buildRing(
158 const LinearRing* ring)
const;
160 bool isEdgeDirForward(
161 const std::vector<CoverageEdge*>& ringEdges,
163 const Coordinate& prevPt)
const;