From 7aa27b7f4c6688f18891ef4171519c1e3b9c182a Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Wed, 20 Jan 2016 13:58:17 -0800 Subject: [PATCH] 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. --- decode.cc | 4 ++-- tile.cc | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/decode.cc b/decode.cc index b5c77b3..d744f25 100644 --- a/decode.cc +++ b/decode.cc @@ -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); diff --git a/tile.cc b/tile.cc index 0e19cb7..8c3f255 100644 --- a/tile.cc +++ b/tile.cc @@ -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;