From 437152e02bcc68d15088662988e19ad4db98453b Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 19 Sep 2016 17:53:31 -0700 Subject: [PATCH] Track the minzoom and maxzoom for each layer separately --- main.cpp | 4 ++++ mbtiles.cpp | 4 ++-- mbtiles.hpp | 2 ++ tests/join-population/joined-i.mbtiles.json | 2 +- tests/join-population/joined.mbtiles.json | 2 +- tile-join.cpp | 10 ++++++++++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index 8c0377e..04ac528 100644 --- a/main.cpp +++ b/main.cpp @@ -1729,6 +1729,10 @@ int read_input(std::vector &sources, char *fname, const char *layername, std::map merged_lm = merge_layermaps(layermaps); + for (auto ai = merged_lm.begin(); ai != merged_lm.end(); ++ai) { + ai->second.minzoom = minzoom; + ai->second.maxzoom = maxzoom; + } mbtiles_write_metadata(outdb, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm); return ret; diff --git a/mbtiles.cpp b/mbtiles.cpp index bf167af..49c6480 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -242,11 +242,11 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, int minzoom, int aprintf(&buf, ", "); } + auto fk = layermap.find(lnames[i]); aprintf(&buf, "{ \"id\": \""); quote(&buf, lnames[i].c_str()); - aprintf(&buf, "\", \"description\": \"\", \"minzoom\": %d, \"maxzoom\": %d, \"fields\": {", minzoom, maxzoom); + aprintf(&buf, "\", \"description\": \"\", \"minzoom\": %d, \"maxzoom\": %d, \"fields\": {", fk->second.minzoom, fk->second.maxzoom); - auto fk = layermap.find(lnames[i]); std::set::iterator j; bool first = true; for (j = fk->second.file_keys.begin(); j != fk->second.file_keys.end(); ++j) { diff --git a/mbtiles.hpp b/mbtiles.hpp index 3a8894c..2eeca19 100644 --- a/mbtiles.hpp +++ b/mbtiles.hpp @@ -8,6 +8,8 @@ struct type_and_string { struct layermap_entry { size_t id; std::set file_keys; + int minzoom; + int maxzoom; layermap_entry(size_t _id) { id = _id; diff --git a/tests/join-population/joined-i.mbtiles.json b/tests/join-population/joined-i.mbtiles.json index 370aca0..d579bbf 100644 --- a/tests/join-population/joined-i.mbtiles.json +++ b/tests/join-population/joined-i.mbtiles.json @@ -3,7 +3,7 @@ "center": "-122.299805,37.892187,12", "description": "tests/join-population/joined-i.mbtiles", "format": "pbf", -"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }", +"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }", "maxzoom": "12", "minzoom": "0", "name": "tests/join-population/joined-i.mbtiles", diff --git a/tests/join-population/joined.mbtiles.json b/tests/join-population/joined.mbtiles.json index 1d8e1be..ca6509c 100644 --- a/tests/join-population/joined.mbtiles.json +++ b/tests/join-population/joined.mbtiles.json @@ -3,7 +3,7 @@ "center": "-122.299805,37.892187,12", "description": "tests/join-population/joined.mbtiles", "format": "pbf", -"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }", +"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ] }", "maxzoom": "12", "minzoom": "0", "name": "tests/join-population/joined.mbtiles", diff --git a/tile-join.cpp b/tile-join.cpp index 58c08e8..4c46d05 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -71,6 +71,9 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map(layer.name, layermap_entry(layermap.size()))); + auto file_keys = layermap.find(layer.name); + file_keys->second.minzoom = z; + file_keys->second.maxzoom = z; } auto file_keys = layermap.find(layer.name); @@ -184,6 +187,13 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::mapsecond.minzoom) { + file_keys->second.minzoom = z; + } + if (z > file_keys->second.maxzoom) { + file_keys->second.maxzoom = z; + } } } }