Don't simplify "unused" movetos from points. Don't write empty geometries.

This commit is contained in:
Eric Fischer 2015-12-11 12:31:10 -08:00
parent 25e261aa35
commit cf279940da
4 changed files with 31 additions and 18 deletions

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -1 +1 @@
#define VERSION "tippecanoe v1.4.1\n"
#define VERSION "tippecanoe v1.4.2\n"