mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-04-09 03:54:13 +00:00
Track the desired tile size for each zoom level in tileset metadata (#7)
This commit is contained in:
parent
c65d6938a4
commit
86f3e98c02
@ -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
|
||||
|
@ -306,6 +306,12 @@ std::string stringify_strategies(std::vector<strategy> 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();
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
@ -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": [
|
||||
|
12
tile.cpp
12
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<std::string, attribute_op> const *attribute_accum = NULL;
|
||||
@ -2451,6 +2452,10 @@ long long write_tile(FILE *geoms, std::atomic<long long> *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;
|
||||
}
|
||||
|
||||
|
4
tile.hpp
4
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;
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifndef VERSION_HPP
|
||||
#define VERSION_HPP
|
||||
|
||||
#define VERSION "v2.3.0"
|
||||
#define VERSION "v2.3.1"
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user