mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-02-01 16:58:05 +00:00
Preserve layer and attribute descriptions across tile-join
This commit is contained in:
parent
bb8b01a702
commit
48f7f1dd38
4
Makefile
4
Makefile
@ -169,7 +169,7 @@ enumerate-test:
|
|||||||
rm tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/out/enum.check
|
rm tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/out/enum.check
|
||||||
|
|
||||||
join-test: tile-join
|
join-test: tile-join
|
||||||
./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles tests/join-population/tabblock_06001420.json
|
./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}'
|
||||||
./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json
|
./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json
|
||||||
./tile-join -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles
|
./tile-join -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles
|
||||||
./tippecanoe-decode tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check
|
./tippecanoe-decode tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check
|
||||||
@ -199,7 +199,7 @@ join-test: tile-join
|
|||||||
cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json
|
cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json
|
||||||
./tile-join --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles
|
./tile-join --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles
|
||||||
diff -x '*.DS_Store' -rq tests/join-population/raw-merged-folder tests/join-population/raw-merged-folder-compare
|
diff -x '*.DS_Store' -rq tests/join-population/raw-merged-folder tests/join-population/raw-merged-folder-compare
|
||||||
./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder tests/join-population/tabblock_06001420.json
|
./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}'
|
||||||
./tippecanoe -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json
|
./tippecanoe -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json
|
||||||
./tippecanoe -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json
|
./tippecanoe -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json
|
||||||
./tile-join -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder
|
./tile-join -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder
|
||||||
|
File diff suppressed because one or more lines are too long
@ -3,7 +3,7 @@
|
|||||||
"center": "-122.299805,37.892187,12",
|
"center": "-122.299805,37.892187,12",
|
||||||
"description": "tests/join-population/tabblock_06001420.mbtiles",
|
"description": "tests/join-population/tabblock_06001420.mbtiles",
|
||||||
"format": "pbf",
|
"format": "pbf",
|
||||||
"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\": \"Mixed\"} } ]}",
|
"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"population\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Land area\", \"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\": \"Mixed\"} } ]}",
|
||||||
"maxzoom": "12",
|
"maxzoom": "12",
|
||||||
"minzoom": "0",
|
"minzoom": "0",
|
||||||
"name": "tests/join-population/tabblock_06001420.mbtiles",
|
"name": "tests/join-population/tabblock_06001420.mbtiles",
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -573,7 +573,46 @@ void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decode(struct reader *readers, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution, std::string &description, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, std::string &name, json_object *filter) {
|
void handle_vector_layers(json_object *vector_layers, std::map<std::string, layermap_entry> &layermap, std::map<std::string, std::string> &attribute_descriptions) {
|
||||||
|
if (vector_layers != NULL && vector_layers->type == JSON_ARRAY) {
|
||||||
|
for (size_t i = 0; i < vector_layers->length; i++) {
|
||||||
|
if (vector_layers->array[i]->type == JSON_HASH) {
|
||||||
|
json_object *id = json_hash_get(vector_layers->array[i], "id");
|
||||||
|
json_object *desc = json_hash_get(vector_layers->array[i], "description");
|
||||||
|
|
||||||
|
if (id != NULL && desc != NULL && id->type == JSON_STRING && desc->type == JSON_STRING) {
|
||||||
|
std::string sid = id->string;
|
||||||
|
std::string sdesc = desc->string;
|
||||||
|
|
||||||
|
if (sdesc.size() != 0) {
|
||||||
|
auto f = layermap.find(sid);
|
||||||
|
if (f != layermap.end()) {
|
||||||
|
f->second.description = sdesc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
json_object *fields = json_hash_get(vector_layers->array[i], "fields");
|
||||||
|
if (fields != NULL && fields->type == JSON_HASH) {
|
||||||
|
for (size_t j = 0; j < fields->length; j++) {
|
||||||
|
if (fields->keys[j]->type == JSON_STRING && fields->values[j]->type) {
|
||||||
|
const char *desc2 = fields->values[j]->string;
|
||||||
|
|
||||||
|
if (strcmp(desc2, "Number") != 0 &&
|
||||||
|
strcmp(desc2, "String") != 0 &&
|
||||||
|
strcmp(desc2, "Boolean") != 0 &&
|
||||||
|
strcmp(desc2, "Mixed") != 0) {
|
||||||
|
attribute_descriptions.insert(std::pair<std::string, std::string>(fields->keys[j]->string, desc2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void decode(struct reader *readers, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution, std::string &description, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, std::string &name, json_object *filter, std::map<std::string, std::string> &attribute_descriptions) {
|
||||||
std::vector<std::map<std::string, layermap_entry>> layermaps;
|
std::vector<std::map<std::string, layermap_entry>> layermaps;
|
||||||
for (size_t i = 0; i < CPUS; i++) {
|
for (size_t i = 0; i < CPUS; i++) {
|
||||||
layermaps.push_back(std::map<std::string, layermap_entry>());
|
layermaps.push_back(std::map<std::string, layermap_entry>());
|
||||||
@ -749,6 +788,27 @@ void decode(struct reader *readers, std::map<std::string, layermap_entry> &layer
|
|||||||
}
|
}
|
||||||
sqlite3_finalize(r->stmt);
|
sqlite3_finalize(r->stmt);
|
||||||
}
|
}
|
||||||
|
if (sqlite3_prepare_v2(db, "SELECT value from metadata where name = 'json'", -1, &r->stmt, NULL) == SQLITE_OK) {
|
||||||
|
if (sqlite3_step(r->stmt) == SQLITE_ROW) {
|
||||||
|
const unsigned char *s = sqlite3_column_text(r->stmt, 0);
|
||||||
|
|
||||||
|
if (s != NULL) {
|
||||||
|
json_pull *jp = json_begin_string((const char *) s);
|
||||||
|
json_object *o = json_read_tree(jp);
|
||||||
|
|
||||||
|
if (o != NULL && o->type == JSON_HASH) {
|
||||||
|
json_object *vector_layers = json_hash_get(o, "vector_layers");
|
||||||
|
|
||||||
|
handle_vector_layers(vector_layers, layermap, attribute_descriptions);
|
||||||
|
json_free(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
json_end(jp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_finalize(r->stmt);
|
||||||
|
}
|
||||||
|
|
||||||
// Closes either real db or temp mirror of metadata.json
|
// Closes either real db or temp mirror of metadata.json
|
||||||
if (sqlite3_close(db) != SQLITE_OK) {
|
if (sqlite3_close(db) != SQLITE_OK) {
|
||||||
@ -990,7 +1050,9 @@ int main(int argc, char **argv) {
|
|||||||
*rr = r;
|
*rr = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
decode(readers, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name, filter);
|
std::map<std::string, std::string> attribute_descriptions;
|
||||||
|
|
||||||
|
decode(readers, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name, filter, attribute_descriptions);
|
||||||
|
|
||||||
if (set_attribution.size() != 0) {
|
if (set_attribution.size() != 0) {
|
||||||
attribution = set_attribution;
|
attribution = set_attribution;
|
||||||
@ -1002,7 +1064,7 @@ int main(int argc, char **argv) {
|
|||||||
name = set_name;
|
name = set_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg, std::map<std::string, std::string>());
|
mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg, attribute_descriptions);
|
||||||
|
|
||||||
if (outdb != NULL) {
|
if (outdb != NULL) {
|
||||||
mbtiles_close(outdb, argv[0]);
|
mbtiles_close(outdb, argv[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user