Track zoom truncation in the strategies list in the tileset metadata

This commit is contained in:
Erica Fischer
2024-08-05 16:56:01 -07:00
parent 3e8c8e2a6d
commit b329489dee
6 changed files with 19 additions and 2 deletions
+8
View File
@@ -444,6 +444,14 @@ std::string stringify_strategies(std::vector<strategy> const &strategies) {
any = true; any = true;
} }
if (strategies[i].truncated_zooms > 0) {
state.nospace = true;
state.json_write_string("truncated_zooms");
state.nospace = true;
state.json_write_number(strategies[i].truncated_zooms);
any = true;
}
state.nospace = true; state.nospace = true;
state.json_end_hash(); state.json_end_hash();
} }
@@ -9,6 +9,7 @@
"maxzoom": "20", "maxzoom": "20",
"minzoom": "0", "minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z20_-r1_--truncate-zooms_--limit-tile-feature-count_50.json.check.mbtiles", "name": "tests/ne_110m_populated_places/out/-z20_-r1_--truncate-zooms_--limit-tile-feature-count_50.json.check.mbtiles",
"strategies": "[{},{\"truncated_zooms\":2},{\"truncated_zooms\":2},{\"truncated_zooms\":8},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]",
"tippecanoe_decisions": "{\"basezoom\":20,\"droprate\":1,\"retain_points_multiplier\":1}", "tippecanoe_decisions": "{\"basezoom\":20,\"droprate\":1,\"retain_points_multiplier\":1}",
"type": "overlay", "type": "overlay",
"version": "2" "version": "2"
@@ -9,7 +9,7 @@
"maxzoom": "14", "maxzoom": "14",
"minzoom": "12", "minzoom": "12",
"name": "tests/tl_2022_11_tract/out/-z14_-Z12_--coalesce-densest-as-needed_--truncate-zooms_-M25000.json.check.mbtiles", "name": "tests/tl_2022_11_tract/out/-z14_-Z12_--coalesce-densest-as-needed_--truncate-zooms_-M25000.json.check.mbtiles",
"strategies": "[{},{},{},{},{},{},{},{},{},{},{},{},{\"coalesced_as_needed\":87,\"tile_size_desired\":39190},{},{}]", "strategies": "[{},{},{},{},{},{},{},{},{},{},{},{},{\"coalesced_as_needed\":87,\"tile_size_desired\":39190,\"truncated_zooms\":3},{\"truncated_zooms\":18},{}]",
"type": "overlay", "type": "overlay",
"version": "2" "version": "2"
}, "features": [ }, "features": [
+2
View File
@@ -877,6 +877,8 @@ void handle_strategies(const unsigned char *s, std::vector<strategy> *st) {
(*st)[i].dropped_as_needed += v->value.number.number; (*st)[i].dropped_as_needed += v->value.number.number;
} else if (strcmp(k->value.string.string, "coalesced_as_needed") == 0) { } else if (strcmp(k->value.string.string, "coalesced_as_needed") == 0) {
(*st)[i].coalesced_as_needed += v->value.number.number; (*st)[i].coalesced_as_needed += v->value.number.number;
} else if (strcmp(k->value.string.string, "truncated_zooms") == 0) {
(*st)[i].truncated_zooms += v->value.number.number;
} else if (strcmp(k->value.string.string, "detail_reduced") == 0) { } else if (strcmp(k->value.string.string, "detail_reduced") == 0) {
(*st)[i].detail_reduced += v->value.number.number; (*st)[i].detail_reduced += v->value.number.number;
} else if (strcmp(k->value.string.string, "tiny_polygons") == 0) { } else if (strcmp(k->value.string.string, "tiny_polygons") == 0) {
+2
View File
@@ -2697,6 +2697,7 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
// We succeeded in stopping early. // We succeeded in stopping early.
// Prune the child tiles. // Prune the child tiles.
strategy.truncated_zooms++;
skip_children_out.insert(zxy(z, tx, ty)); skip_children_out.insert(zxy(z, tx, ty));
} }
@@ -3206,4 +3207,5 @@ void atomic_strategy::add_from(struct strategy const &src) {
coalesced_as_needed += src.coalesced_as_needed; coalesced_as_needed += src.coalesced_as_needed;
detail_reduced += src.detail_reduced; detail_reduced += src.detail_reduced;
tiny_polygons += src.tiny_polygons; tiny_polygons += src.tiny_polygons;
truncated_zooms += src.truncated_zooms;
} }
+5 -1
View File
@@ -18,6 +18,7 @@ struct atomic_strategy {
std::atomic<size_t> coalesced_as_needed; std::atomic<size_t> coalesced_as_needed;
std::atomic<size_t> detail_reduced; std::atomic<size_t> detail_reduced;
std::atomic<size_t> tiny_polygons; std::atomic<size_t> tiny_polygons;
std::atomic<size_t> truncated_zooms;
atomic_strategy() atomic_strategy()
: dropped_by_rate(0), : dropped_by_rate(0),
@@ -25,7 +26,8 @@ struct atomic_strategy {
dropped_as_needed(0), dropped_as_needed(0),
coalesced_as_needed(0), coalesced_as_needed(0),
detail_reduced(0), detail_reduced(0),
tiny_polygons(0) { tiny_polygons(0),
truncated_zooms(0) {
} }
void add_from(struct strategy const &src); void add_from(struct strategy const &src);
@@ -38,6 +40,7 @@ struct strategy {
size_t coalesced_as_needed = 0; size_t coalesced_as_needed = 0;
size_t detail_reduced = 0; size_t detail_reduced = 0;
size_t tiny_polygons = 0; size_t tiny_polygons = 0;
size_t truncated_zooms = 0;
size_t tile_size = 0; size_t tile_size = 0;
size_t feature_count = 0; size_t feature_count = 0;
@@ -51,6 +54,7 @@ struct strategy {
tile_size = ts; tile_size = ts;
feature_count = fc; feature_count = fc;
tiny_polygons = s.tiny_polygons; tiny_polygons = s.tiny_polygons;
truncated_zooms = s.truncated_zooms;
} }
strategy() = default; strategy() = default;