60class GEOS_DLL TPVWSimplifier
62 using Corner = geos::coverage::Corner;
71 template<
typename ItemType>
72 using TemplateSTRtree = geos::index::strtree::TemplateSTRtree<ItemType>;
73 using LinkedLine = geos::simplify::LinkedLine;
88 const Envelope* envelope;
90 LinkedLine linkedLine;
91 VertexSequencePackedRtree vertexIndex;
92 std::size_t minEdgeSize;
103 Edge(
const LineString* p_inputLine,
bool p_isFreeRing,
double p_areaTolerance);
105 const Coordinate& getCoordinate(std::size_t
index)
const;
107 const Envelope* getEnvelopeInternal()
const;
109 std::size_t size()
const;
111 std::unique_ptr<CoordinateSequence>
simplify(EdgeIndex& edgeIndex);
113 void createQueue(Corner::PriorityQueue& pq);
115 void addCorner(std::size_t i, Corner::PriorityQueue& cornerQueue);
117 bool isRemovable(Corner& corner, EdgeIndex& edgeIndex)
const;
128 bool hasIntersectingVertex(
const Corner& corner,
129 const Envelope& cornerEnv,
130 const Edge& edge)
const;
132 std::vector<std::size_t> query(
const Envelope& cornerEnv)
const;
145 Corner::PriorityQueue& cornerQueue);
153 TemplateSTRtree<const Edge*>
index;
155 void add(std::vector<Edge>& edges);
157 std::vector<const Edge*> query(
const Envelope& queryEnv);
170 const MultiLineString* lines,
171 double distanceTolerance);
187 const MultiLineString* lines,
188 std::vector<bool>& freeRings,
189 const MultiLineString* constraintLines,
190 double distanceTolerance);
193 TPVWSimplifier(
const MultiLineString* lines,
194 double distanceTolerance);
200 const MultiLineString* inputLines;
201 std::vector<bool> isFreeRing;
202 double areaTolerance;
203 const GeometryFactory* geomFactory;
204 const MultiLineString* constraintLines;
208 void setFreeRingIndices(std::vector<bool>& freeRing);
210 void setConstraints(
const MultiLineString* constraints);
212 std::unique_ptr<MultiLineString>
simplify();
214 std::vector<Edge> createEdges(
215 const MultiLineString* lines,
216 std::vector<bool>& freeRing);