19 #ifndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
20 #define GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
22 #include <geos/geom/CoordinateSequence.h>
31 class CoordinateSequence;
72 class BufferInputLineSimplifier {
88 static std::unique_ptr<geom::CoordinateSequence>
simplify(
89 const geom::CoordinateSequence& inputLine,
double distanceTol);
91 BufferInputLineSimplifier(
const geom::CoordinateSequence& input);
103 std::unique_ptr<geom::CoordinateSequence>
simplify(
double distanceTol);
113 bool deleteShallowConcavities();
123 size_t findNextNonDeletedIndex(
size_t index)
const;
125 std::unique_ptr<geom::CoordinateSequence> collapseLine()
const;
127 bool isDeletable(
size_t i0,
size_t i1,
size_t i2,
double distanceTol)
const;
129 bool isShallowConcavity(
const geom::Coordinate& p0,
130 const geom::Coordinate& p1,
131 const geom::Coordinate& p2,
132 double distanceTol)
const;
147 bool isShallowSampled(
const geom::Coordinate& p0,
148 const geom::Coordinate& p2,
149 size_t i0,
size_t i2,
double distanceTol)
const;
151 bool isShallow(
const geom::Coordinate& p0,
152 const geom::Coordinate& p1,
153 const geom::Coordinate& p2,
154 double distanceTol)
const;
156 bool isConcave(
const geom::Coordinate& p0,
157 const geom::Coordinate& p1,
158 const geom::Coordinate& p2)
const;
160 static const int NUM_PTS_TO_CHECK = 10;
162 static const int INIT = 0;
163 static const int DELETE = 1;
164 static const int KEEP = 1;
166 const geom::CoordinateSequence& inputLine;
168 std::vector<int> isDeleted;
170 int angleOrientation;
173 BufferInputLineSimplifier(
const BufferInputLineSimplifier& other) =
delete;
174 BufferInputLineSimplifier& operator=(
const BufferInputLineSimplifier& rhs) =
delete;
183 #endif // ndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H