From 0514802f66635e502cfaab7adb77cabe25c5e02c Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Fri, 23 Aug 2024 12:18:46 -0700 Subject: [PATCH] More fleshing out bin traversal --- clip.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/clip.cpp b/clip.cpp index 43eac0a4..91077eed 100644 --- a/clip.cpp +++ b/clip.cpp @@ -1151,7 +1151,7 @@ static struct preservecmp { struct index_event { unsigned long long where; - enum { + enum index_event_kind { ENTER = 0, // new bin in is now active CHECK, // point needs to be checked against active bins EXIT // bin has ceased to be active @@ -1159,6 +1159,10 @@ struct index_event { size_t layer; size_t feature; + index_event(unsigned long long where_, index_event_kind kind_, size_t layer_, size_t feature_) + : where(where_), kind(kind_), layer(layer_), feature(feature_) { + } + bool operator<(const index_event &ie) const { if (where < ie.where) { return true; @@ -1180,19 +1184,32 @@ struct index_event { } }; -mvt_tile assign_to_bins(mvt_tile const &features, std::vector const &bins, int z, int x, int y) { +void get_quadkey_bounds(std::vector const &geom, + unsigned long long *start, unsigned long long *end, + int z, int x, int y, int extent) { +} + +mvt_tile assign_to_bins(mvt_tile const &features, std::vector const &bins, int z, int x, int y, int extent) { std::vector events; // Index bins for (size_t i = 0; i < bins.size(); i++) { for (size_t j = 0; j < bins[i].features.size(); j++) { + unsigned long long start, end; + + get_quadkey_bounds(bins[i].features[j].geometry, &start, &end, z, x, y, extent); + events.emplace_back(start, index_event::ENTER, i, j); + events.emplace_back(end, index_event::EXIT, i, j); } } // Index points for (size_t i = 0; i < features.layers.size(); i++) { for (size_t j = 0; j < features.layers[i].features.size(); j++) { - index_event ie; + unsigned long long start, end; + + get_quadkey_bounds(bins[i].features[j].geometry, &start, &end, z, x, y, extent); + events.emplace_back(start, index_event::CHECK, i, j); } } @@ -1431,7 +1448,7 @@ std::string overzoom(std::vector const &tiles, int nz, int nx, int } if (bins.size() > 0) { - outtile = assign_to_bins(outtile, bins, nz, nx, ny); + outtile = assign_to_bins(outtile, bins, nz, nx, ny, 1 << detail); } for (ssize_t i = outtile.layers.size() - 1; i >= 0; i--) {