Skip to content

Commit 3bba891

Browse files
authored
Don't remove nodes at edges (fixes #261) (#262)
1 parent 2179082 commit 3bba891

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

src/geom.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ void simplify(GeometryType const &input, GeometryType &output, double max_distan
2626
for(std::size_t i = 0; i < input.size(); ++i)
2727
nodes[i] = i;
2828
for(std::size_t i = 0; i < input.size() - 1; ++i)
29-
rtree.insert({ input[i], input[i + 1] });
30-
29+
rtree.insert({ input[i], input[i + 1] });
30+
Box envelope; boost::geometry::envelope(input, envelope);
31+
3132
std::priority_queue<std::size_t, std::vector<size_t>> pq;
3233
for(std::size_t i = 0; i < input.size() - 2; ++i)
3334
pq.push(i);
@@ -38,8 +39,13 @@ void simplify(GeometryType const &input, GeometryType &output, double max_distan
3839

3940
auto start = nodes[entry];
4041
auto middle = nodes[entry + 1];
41-
auto end = nodes[entry + 2];
42-
42+
auto end = nodes[entry + 2];
43+
44+
if (input[middle].x()==envelope.min_corner().x() ||
45+
input[middle].y()==envelope.min_corner().y() ||
46+
input[middle].x()==envelope.max_corner().x() ||
47+
input[middle].y()==envelope.max_corner().y()) continue;
48+
4349
simplify_segment line(input[start], input[end]);
4450
double distance = 0.0;
4551
for(auto i = start + 1; i < end; ++i)

0 commit comments

Comments
 (0)