From 86f3e98c02721ccd1291d0995585ec46d1de7d24 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Thu, 11 Aug 2022 09:58:00 -0700 Subject: [PATCH] Track the desired tile size for each zoom level in tileset metadata (#7) --- CHANGELOG.md | 4 ++++ mbtiles.cpp | 6 ++++++ tests/muni/out/-Z11_-z13_-M10000.json | 2 +- tests/muni/out/-Z11_-z13_-M10000_-aG.json | 2 +- tests/muni/out/-Z11_-z13_-M10000_-ad.json | 2 +- tests/muni/out/-Z11_-z13_-M10000_-pd.json | 2 +- tests/muni/out/-Z11_-z13_-M5000_-as.json | 2 +- .../out/-ae_-zg_-M5000_--drop-densest-as-needed.json | 2 +- .../-ae_-zg_-M5000_--drop-fraction-as-needed.json | 2 +- .../-ae_-zg_-M5000_--drop-smallest-as-needed.json | 2 +- .../out/-ae_-zg_-M5000_--force-feature-limit.json | 2 +- .../out/-z5_-M5000_--coalesce-densest-as-needed.json | 2 +- .../-z5_-M5000_--coalesce-fraction-as-needed.json | 2 +- .../-z5_-M5000_--coalesce-smallest-as-needed.json | 2 +- .../out/-z5_-M5000_--drop-smallest-as-needed.json | 2 +- .../out/-z5_-M500_--drop-smallest-as-needed.json | 2 +- .../-z1_-M10000_--coalesce-smallest-as-needed.json | 2 +- .../out/-z1_-M10000_--drop-smallest-as-needed.json | 2 +- tile.cpp | 12 +++++++++++- tile.hpp | 4 +++- version.hpp | 2 +- 21 files changed, 41 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 154ceb9..9fde753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.1 + +* Track the desired tile size (the maximum size if no features were dropped) in each zoom level too. + ## 2.3.0 * Drop and coalesce points too as part of smallest-as-needed dropping and coalescing diff --git a/mbtiles.cpp b/mbtiles.cpp index e8805b7..0cedb4b 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -306,6 +306,12 @@ std::string stringify_strategies(std::vector const &strategies) { any = true; } + if (strategies[i].tile_size > 0) { + state.json_write_string("tile_size_desired"); + state.json_write_number(strategies[i].tile_size); + any = true; + } + state.json_end_hash(); } state.json_end_array(); diff --git a/tests/muni/out/-Z11_-z13_-M10000.json b/tests/muni/out/-Z11_-z13_-M10000.json index e889cdb..9110275 100644 --- a/tests/muni/out/-Z11_-z13_-M10000.json +++ b/tests/muni/out/-Z11_-z13_-M10000.json @@ -8,7 +8,7 @@ "maxzoom": "13", "minzoom": "11", "name": "tests/muni/out/-Z11_-z13_-M10000.json.check.mbtiles", -"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"detail_reduced\": 4 }, { \"dropped_by_rate\": 6390, \"detail_reduced\": 3 }, { } ]", +"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"detail_reduced\": 4, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 6390, \"detail_reduced\": 3, \"tile_size_desired\": 10726 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/muni/out/-Z11_-z13_-M10000_-aG.json b/tests/muni/out/-Z11_-z13_-M10000_-aG.json index 3fbe285..9790b85 100644 --- a/tests/muni/out/-Z11_-z13_-M10000_-aG.json +++ b/tests/muni/out/-Z11_-z13_-M10000_-aG.json @@ -8,7 +8,7 @@ "maxzoom": "13", "minzoom": "11", "name": "tests/muni/out/-Z11_-z13_-M10000_-aG.json.check.mbtiles", -"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"dropped_by_gamma\": 65, \"detail_reduced\": 4 }, { \"dropped_by_rate\": 5251, \"dropped_by_gamma\": 155, \"detail_reduced\": 2 }, { } ]", +"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"dropped_by_gamma\": 65, \"detail_reduced\": 4, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 5251, \"dropped_by_gamma\": 155, \"detail_reduced\": 2, \"tile_size_desired\": 10726 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/muni/out/-Z11_-z13_-M10000_-ad.json b/tests/muni/out/-Z11_-z13_-M10000_-ad.json index cae4b12..0321bce 100644 --- a/tests/muni/out/-Z11_-z13_-M10000_-ad.json +++ b/tests/muni/out/-Z11_-z13_-M10000_-ad.json @@ -8,7 +8,7 @@ "maxzoom": "13", "minzoom": "11", "name": "tests/muni/out/-Z11_-z13_-M10000_-ad.json.check.mbtiles", -"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 107 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 232 }, { } ]", +"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 107, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 232, \"tile_size_desired\": 10726 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/muni/out/-Z11_-z13_-M10000_-pd.json b/tests/muni/out/-Z11_-z13_-M10000_-pd.json index 83e48c5..dee7ef8 100644 --- a/tests/muni/out/-Z11_-z13_-M10000_-pd.json +++ b/tests/muni/out/-Z11_-z13_-M10000_-pd.json @@ -8,7 +8,7 @@ "maxzoom": "13", "minzoom": "11", "name": "tests/muni/out/-Z11_-z13_-M10000_-pd.json.check.mbtiles", -"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 7695, \"dropped_as_needed\": 93 }, { \"dropped_by_rate\": 4112, \"dropped_as_needed\": 87 }, { } ]", +"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 7695, \"dropped_as_needed\": 93, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 4112, \"dropped_as_needed\": 87, \"tile_size_desired\": 10726 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/muni/out/-Z11_-z13_-M5000_-as.json b/tests/muni/out/-Z11_-z13_-M5000_-as.json index e2ee9aa..52bc397 100644 --- a/tests/muni/out/-Z11_-z13_-M5000_-as.json +++ b/tests/muni/out/-Z11_-z13_-M5000_-as.json @@ -8,7 +8,7 @@ "maxzoom": "13", "minzoom": "11", "name": "tests/muni/out/-Z11_-z13_-M5000_-as.json.check.mbtiles", -"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 488 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 1306 }, { \"dropped_as_needed\": 3030 } ]", +"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 488, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 1306, \"tile_size_desired\": 10726 }, { \"dropped_as_needed\": 3030, \"tile_size_desired\": 9566 } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json index 1ca0bc3..33c1748 100644 --- a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 170 }, { \"dropped_as_needed\": 186 }, { \"dropped_as_needed\": 164 }, { \"dropped_as_needed\": 118 }, { \"dropped_as_needed\": 58 }, { } ]", +"strategies": "[ { \"dropped_as_needed\": 170, \"tile_size_desired\": 39574 }, { \"dropped_as_needed\": 186, \"tile_size_desired\": 25463 }, { \"dropped_as_needed\": 164, \"tile_size_desired\": 21446 }, { \"dropped_as_needed\": 118, \"tile_size_desired\": 10933 }, { \"dropped_as_needed\": 58, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json index 5977d64..1c3cec2 100644 --- a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 162 }, { \"dropped_as_needed\": 189 }, { \"dropped_as_needed\": 190 }, { \"dropped_as_needed\": 187 }, { \"dropped_as_needed\": 157 }, { } ]", +"strategies": "[ { \"dropped_as_needed\": 162, \"tile_size_desired\": 39574 }, { \"dropped_as_needed\": 189, \"tile_size_desired\": 25463 }, { \"dropped_as_needed\": 190, \"tile_size_desired\": 21446 }, { \"dropped_as_needed\": 187, \"tile_size_desired\": 10933 }, { \"dropped_as_needed\": 157, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json index 95ed9ee..8304193 100644 --- a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 173 }, { \"dropped_as_needed\": 197 }, { \"dropped_as_needed\": 183 }, { \"dropped_as_needed\": 156 }, { \"dropped_as_needed\": 62 }, { } ]", +"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39574 }, { \"dropped_as_needed\": 197, \"tile_size_desired\": 25463 }, { \"dropped_as_needed\": 183, \"tile_size_desired\": 21446 }, { \"dropped_as_needed\": 156, \"tile_size_desired\": 10933 }, { \"dropped_as_needed\": 62, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json index a8c4eb0..ae833c3 100644 --- a/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json +++ b/tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 318 }, { \"dropped_as_needed\": 477 }, { \"dropped_as_needed\": 225 }, { \"dropped_as_needed\": 117 }, { \"dropped_as_needed\": 10 }, { } ]", +"strategies": "[ { \"dropped_as_needed\": 318, \"tile_size_desired\": 39574 }, { \"dropped_as_needed\": 477, \"tile_size_desired\": 25463 }, { \"dropped_as_needed\": 225, \"tile_size_desired\": 21446 }, { \"dropped_as_needed\": 117, \"tile_size_desired\": 10933 }, { \"dropped_as_needed\": 10, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json index d083f2f..83f56e9 100644 --- a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json.check.mbtiles", -"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3 }, { \"coalesced_as_needed\": 211 }, { \"coalesced_as_needed\": 190 }, { \"coalesced_as_needed\": 148 }, { \"coalesced_as_needed\": 58 }, { } ]", +"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39572 }, { \"coalesced_as_needed\": 211, \"tile_size_desired\": 25463 }, { \"coalesced_as_needed\": 190, \"tile_size_desired\": 21449 }, { \"coalesced_as_needed\": 148, \"tile_size_desired\": 10931 }, { \"coalesced_as_needed\": 58, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json index 1c19740..928515f 100644 --- a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json.check.mbtiles", -"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3 }, { \"coalesced_as_needed\": 216 }, { \"coalesced_as_needed\": 219 }, { \"coalesced_as_needed\": 226 }, { \"coalesced_as_needed\": 180 }, { } ]", +"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39572 }, { \"coalesced_as_needed\": 216, \"tile_size_desired\": 25463 }, { \"coalesced_as_needed\": 219, \"tile_size_desired\": 21449 }, { \"coalesced_as_needed\": 226, \"tile_size_desired\": 10931 }, { \"coalesced_as_needed\": 180, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json index 05034ef..53281a5 100644 --- a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"coalesced_as_needed\": 1431 }, { \"coalesced_as_needed\": 1308 }, { \"coalesced_as_needed\": 801 }, { \"coalesced_as_needed\": 190 }, { \"coalesced_as_needed\": 72 }, { } ]", +"strategies": "[ { \"coalesced_as_needed\": 1431, \"tile_size_desired\": 39572 }, { \"coalesced_as_needed\": 1308, \"tile_size_desired\": 25463 }, { \"coalesced_as_needed\": 801, \"tile_size_desired\": 21449 }, { \"coalesced_as_needed\": 190, \"tile_size_desired\": 10931 }, { \"coalesced_as_needed\": 72, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json index d300445..479e2a3 100644 --- a/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json +++ b/tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 173 }, { \"dropped_as_needed\": 197 }, { \"dropped_as_needed\": 183 }, { \"dropped_as_needed\": 156 }, { \"dropped_as_needed\": 62 }, { } ]", +"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39572 }, { \"dropped_as_needed\": 197, \"tile_size_desired\": 25463 }, { \"dropped_as_needed\": 183, \"tile_size_desired\": 21449 }, { \"dropped_as_needed\": 156, \"tile_size_desired\": 10931 }, { \"dropped_as_needed\": 62, \"tile_size_desired\": 6702 }, { } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json b/tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json index 85c607b..44efab3 100644 --- a/tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json +++ b/tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "5", "minzoom": "0", "name": "tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_as_needed\": 92 }, { \"dropped_as_needed\": 97 }, { \"dropped_as_needed\": 115 }, { \"dropped_as_needed\": 113 }, { \"dropped_as_needed\": 106 }, { \"dropped_as_needed\": 102 } ]", +"strategies": "[ { \"dropped_as_needed\": 92, \"tile_size_desired\": 1372 }, { \"dropped_as_needed\": 97, \"tile_size_desired\": 1731 }, { \"dropped_as_needed\": 115, \"tile_size_desired\": 1306 }, { \"dropped_as_needed\": 113, \"tile_size_desired\": 1160 }, { \"dropped_as_needed\": 106, \"tile_size_desired\": 1229 }, { \"dropped_as_needed\": 102, \"tile_size_desired\": 1079 } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json b/tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json index 0320070..664dd8f 100644 --- a/tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json +++ b/tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "1", "minzoom": "0", "name": "tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_by_rate\": 145, \"coalesced_as_needed\": 78 }, { \"coalesced_as_needed\": 229 } ]", +"strategies": "[ { \"dropped_by_rate\": 145, \"coalesced_as_needed\": 78, \"tile_size_desired\": 34120 }, { \"coalesced_as_needed\": 229, \"tile_size_desired\": 46042 } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json b/tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json index b1af4ad..906ca6c 100644 --- a/tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json +++ b/tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json @@ -8,7 +8,7 @@ "maxzoom": "1", "minzoom": "0", "name": "tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json.check.mbtiles", -"strategies": "[ { \"dropped_by_rate\": 145, \"dropped_as_needed\": 72 }, { \"dropped_as_needed\": 206 } ]", +"strategies": "[ { \"dropped_by_rate\": 145, \"dropped_as_needed\": 72, \"tile_size_desired\": 34120 }, { \"dropped_as_needed\": 206, \"tile_size_desired\": 46042 } ]", "type": "overlay", "version": "2" }, "features": [ diff --git a/tile.cpp b/tile.cpp index 3b5893e..f5df313 100644 --- a/tile.cpp +++ b/tile.cpp @@ -1214,6 +1214,7 @@ struct write_tile_args { long long minextent_out = 0; double fraction = 0; double fraction_out = 0; + size_t tile_size_out = 0; const char *prefilter = NULL; const char *postfilter = NULL; std::map const *attribute_accum = NULL; @@ -2451,6 +2452,10 @@ long long write_tile(FILE *geoms, std::atomic *geompos_in, char *meta } if (compressed.size() > max_tile_size && !prevent[P_KILOBYTE_LIMIT]) { + if (compressed.size() > arg->tile_size_out) { + arg->tile_size_out = compressed.size(); + } + if (!quiet) { fprintf(stderr, "tile %d/%u/%u size is %lld with detail %d, >%zu \n", z, tx, ty, (long long) compressed.size(), line_detail, max_tile_size); } @@ -2815,6 +2820,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo unsigned long long zoom_mingap = ((1LL << (32 - i)) / 256 * cluster_distance) * ((1LL << (32 - i)) / 256 * cluster_distance); long long zoom_minextent = 0; double zoom_fraction = 1; + size_t zoom_tile_size = 0; for (size_t pass = start; pass < 2; pass++) { pthread_t pthreads[threads]; @@ -2843,6 +2849,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo args[thread].minextent_out = zoom_minextent; args[thread].fraction = zoom_fraction; args[thread].fraction_out = zoom_fraction; + args[thread].tile_size_out = 0; args[thread].child_shards = TEMP_FILES / threads; args[thread].simplification = simplification; @@ -2904,6 +2911,9 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo if (args[thread].fraction_out < zoom_fraction) { zoom_fraction = args[thread].fraction_out; } + if (args[thread].tile_size_out > zoom_tile_size) { + zoom_tile_size = args[thread].tile_size_out; + } // Zoom counter might be lower than reality if zooms are being skipped if (args[thread].wrote_zoom > i) { @@ -2918,7 +2928,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo if ((size_t) i >= strategies.size()) { strategies.resize(i + 1); } - struct strategy s(strategy); + struct strategy s(strategy, zoom_tile_size); strategies[i] = s; } diff --git a/tile.hpp b/tile.hpp index 2eee7ed..29d84ef 100644 --- a/tile.hpp +++ b/tile.hpp @@ -41,13 +41,15 @@ struct strategy { size_t dropped_as_needed = 0; size_t coalesced_as_needed = 0; size_t detail_reduced = 0; + size_t tile_size = 0; - strategy(const atomic_strategy &s) { + strategy(const atomic_strategy &s, size_t ts) { dropped_by_rate = s.dropped_by_rate; dropped_by_gamma = s.dropped_by_gamma; dropped_as_needed = s.dropped_as_needed; coalesced_as_needed = s.coalesced_as_needed; detail_reduced = s.detail_reduced; + tile_size = ts; } strategy() = default; diff --git a/version.hpp b/version.hpp index d21fc2e..3c1d755 100644 --- a/version.hpp +++ b/version.hpp @@ -1,6 +1,6 @@ #ifndef VERSION_HPP #define VERSION_HPP -#define VERSION "v2.3.0" +#define VERSION "v2.3.1" #endif