Make calculation of child tile overlap match clipping behavior.

Coordinates that are right on the tile boundary appear in both
adjacent tiles.

Make tippecanoe-decode also use exact edge coordinates instead of
half-pixel locations.
This commit is contained in:
Eric Fischer 2016-01-20 13:58:17 -08:00
parent 45043922e7
commit 7aa27b7f4c
2 changed files with 6 additions and 4 deletions

View File

@ -194,8 +194,8 @@ void handle(std::string message, int z, unsigned x, unsigned y, int describe) {
g += 2;
long long scale = 1LL << (32 - z);
long long wx = scale * x + (scale / extent) * (px + .5);
long long wy = scale * y + (scale / extent) * (py + .5);
long long wx = scale * x + (scale / extent) * px;
long long wy = scale * y + (scale / extent) * py;
double lat, lon;
tile2latlon(wx, wy, 32, &lat, &lon);

View File

@ -376,8 +376,10 @@ void rewrite(drawvec &geom, int z, int nextzoom, int maxzoom, long long *bbox, u
// Division instead of right-shift because coordinates can be negative
bbox2[k] = bbox[k] / (1 << (32 - nextzoom - 8));
}
bbox2[0] -= buffer;
bbox2[1] -= buffer;
// Decrement the top and left edges so that any features that are
// touching the edge can potentially be included in the adjacent tiles too.
bbox2[0] -= buffer + 1;
bbox2[1] -= buffer + 1;
bbox2[2] += buffer;
bbox2[3] += buffer;