mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-05 09:55:41 +02:00
Fix multiply duplicated spikes
This commit is contained in:
+10
-5
@@ -34,7 +34,7 @@ struct point {
|
|||||||
typedef std::pair<point, point> segment;
|
typedef std::pair<point, point> segment;
|
||||||
|
|
||||||
void fix_opposites(std::vector<segment> &segs) {
|
void fix_opposites(std::vector<segment> &segs) {
|
||||||
std::map<segment, size_t> opposites;
|
std::multimap<segment, size_t> opposites;
|
||||||
segment erased = std::make_pair(point(INT_MAX, INT_MAX), point(INT_MAX, INT_MAX));
|
segment erased = std::make_pair(point(INT_MAX, INT_MAX), point(INT_MAX, INT_MAX));
|
||||||
|
|
||||||
for (size_t i = 0; i < segs.size(); i++) {
|
for (size_t i = 0; i < segs.size(); i++) {
|
||||||
@@ -47,11 +47,16 @@ void fix_opposites(std::vector<segment> &segs) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto f = opposites.find(segs[i]);
|
auto f = opposites.equal_range(segs[i]);
|
||||||
if (f != opposites.end()) {
|
for (; f.first != f.second; ++f.first) {
|
||||||
|
if (segs[f.first->second] == erased) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
segs[i] = erased;
|
segs[i] = erased;
|
||||||
segs[f->second] = erased;
|
segs[f.first->second] = erased;
|
||||||
opposites.erase(f);
|
opposites.erase(f.first);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user