mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-01-22 04:18:01 +00:00
Don't simplify "unused" movetos from points. Don't write empty geometries.
This commit is contained in:
parent
25e261aa35
commit
cf279940da
@ -1,3 +1,8 @@
|
||||
## 1.4.2
|
||||
|
||||
* Bug fix for problem that would occasionally produce empty point geometries
|
||||
* More bug fixes for polygon generation
|
||||
|
||||
## 1.4.1
|
||||
|
||||
* Features that cross the antimeridian are split into two parts instead
|
||||
|
36
geometry.cc
36
geometry.cc
@ -108,27 +108,29 @@ drawvec remove_noop(drawvec geom, int type, int shift) {
|
||||
|
||||
// second pass: remove unused movetos
|
||||
|
||||
geom = out;
|
||||
out.resize(0);
|
||||
if (type != VT_POINT) {
|
||||
geom = out;
|
||||
out.resize(0);
|
||||
|
||||
for (i = 0; i < geom.size(); i++) {
|
||||
if (geom[i].op == VT_MOVETO) {
|
||||
if (i + 1 >= geom.size()) {
|
||||
continue;
|
||||
for (i = 0; i < geom.size(); i++) {
|
||||
if (geom[i].op == VT_MOVETO) {
|
||||
if (i + 1 >= geom.size()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (geom[i + 1].op == VT_MOVETO) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (geom[i + 1].op == VT_CLOSEPATH) {
|
||||
fprintf(stderr, "Shouldn't happen\n");
|
||||
i++; // also remove unused closepath
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (geom[i + 1].op == VT_MOVETO) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (geom[i + 1].op == VT_CLOSEPATH) {
|
||||
fprintf(stderr, "Shouldn't happen\n");
|
||||
i++; // also remove unused closepath
|
||||
continue;
|
||||
}
|
||||
out.push_back(geom[i]);
|
||||
}
|
||||
|
||||
out.push_back(geom[i]);
|
||||
}
|
||||
|
||||
// second pass: remove empty movetos
|
||||
|
6
tile.cc
6
tile.cc
@ -753,12 +753,18 @@ long long write_tile(char **geoms, char *metabase, char *stringpool, int z, unsi
|
||||
}
|
||||
features[j] = out;
|
||||
|
||||
out.clear();
|
||||
for (x = 0; x < features[j].size(); x++) {
|
||||
if (features[j][x].coalesced && features[j][x].type == VT_LINE) {
|
||||
features[j][x].geom = remove_noop(features[j][x].geom, features[j][x].type, 0);
|
||||
features[j][x].geom = simplify_lines(features[j][x].geom, 32, 0);
|
||||
}
|
||||
|
||||
if (features[j][x].geom.size() > 0) {
|
||||
out.push_back(features[j][x]);
|
||||
}
|
||||
}
|
||||
features[j] = out;
|
||||
|
||||
if (prevent['i' & 0xFF]) {
|
||||
std::sort(features[j].begin(), features[j].end(), preservecmp);
|
||||
|
Loading…
Reference in New Issue
Block a user