64class GEOS_DLL TaggedLineStringSimplifier {
71 TaggedLineStringSimplifier(LineSegmentIndex* inputIndex,
72 LineSegmentIndex* outputIndex,
73 const ComponentJumpChecker* jumpChecker);
88 LineSegmentIndex* inputIndex;
91 LineSegmentIndex* outputIndex;
93 const ComponentJumpChecker* jumpChecker;
95 std::unique_ptr<algorithm::LineIntersector> li;
100 const CoordinateSequence* linePts;
102 void simplifySection(std::size_t i, std::size_t j, std::size_t depth,
double distanceTolerance);
104 void simplifyRingEndpoint(
double distanceTolerance);
106 static std::size_t findFurthestPoint(
107 const CoordinateSequence* pts,
108 std::size_t i, std::size_t j,
109 double& maxDistance);
111 bool isTopologyValid(
113 std::size_t sectionStart, std::size_t sectionEnd,
114 const LineSegment& flatSeg);
116 bool isTopologyValid(
118 const LineSegment* seg1,
const LineSegment* seg2,
119 const LineSegment& flatSeg);
121 bool hasInputIntersection(
const LineSegment& flatSeg);
123 bool hasInputIntersection(
125 std::size_t excludeStart, std::size_t excludeEnd,
126 const LineSegment& flatSeg);
128 bool isCollinear(
const Coordinate& pt,
const LineSegment& seg)
const;
130 bool hasOutputIntersection(
const LineSegment& flatSeg);
132 bool hasInvalidIntersection(
133 const LineSegment& seg0,
134 const LineSegment& seg1)
const;
137 std::unique_ptr<TaggedLineSegment> flatten(
138 std::size_t start, std::size_t end);
152 static bool isInLineSection(
154 const std::size_t excludeStart,
const std::size_t excludeEnd,