diff --git a/geojson.c b/geojson.c index fe629af4..0664f423 100644 --- a/geojson.c +++ b/geojson.c @@ -169,6 +169,7 @@ void parse_geometry(int t, json_object *j, unsigned *bbox, long long *fpos, FILE } int within = geometry_within[t]; + long long began = *fpos; if (within >= 0) { int i; for (i = 0; i < j->length; i++) { @@ -212,8 +213,10 @@ void parse_geometry(int t, json_object *j, unsigned *bbox, long long *fpos, FILE } } - if (mb_geometry[t] == VT_POLYGON) { - serialize_int(out, VT_CLOSEPATH, fpos, fname, source); + if (t == GEOM_POLYGON) { + if (*fpos != began) { + serialize_int(out, VT_CLOSEPATH, fpos, fname, source); + } } } diff --git a/tile.cc b/tile.cc index d1bbf7d7..eabf5b1e 100644 --- a/tile.cc +++ b/tile.cc @@ -522,6 +522,10 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double } } + if (j + 1 < geom.size() && geom[j + 1].op == VT_CLOSEPATH) { + fprintf(stderr, "double closepath\n"); + } + double area = 0; for (unsigned k = i; k < j; k++) { area += geom[k].x * geom[i + ((k - i + 1) % (j - i))].y; @@ -556,6 +560,7 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double i = j; } else { + fprintf(stderr, "how did we get here with %d?\n", geom[i].op); out.push_back(geom[i]); } }