mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Fill out layermaps when reading the output of the prefilter
This commit is contained in:
+34
-1
@@ -239,7 +239,7 @@ mvt_layer parse_layer(int fd, unsigned z, unsigned x, unsigned y, mvt_layer cons
|
||||
return ret;
|
||||
}
|
||||
|
||||
serial_feature parse_feature(json_pull *jp, unsigned z, unsigned x, unsigned y) {
|
||||
serial_feature parse_feature(json_pull *jp, unsigned z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg) {
|
||||
serial_feature sf;
|
||||
|
||||
while (1) {
|
||||
@@ -332,6 +332,16 @@ serial_feature parse_feature(json_pull *jp, unsigned z, unsigned x, unsigned y)
|
||||
}
|
||||
|
||||
if (dv.size() > 0) {
|
||||
std::string layername = "unknown";
|
||||
json_object *tippecanoe = json_hash_get(j, "tippecanoe");
|
||||
json_object *layer = NULL;
|
||||
if (tippecanoe != NULL) {
|
||||
layer = json_hash_get(tippecanoe, "layer");
|
||||
if (layer != NULL && layer->type == JSON_STRING) {
|
||||
layername = std::string(layer->string);
|
||||
}
|
||||
}
|
||||
|
||||
sf.t = mb_geometry[t];
|
||||
sf.geometry = dv;
|
||||
sf.segment = 0;
|
||||
@@ -350,6 +360,8 @@ serial_feature parse_feature(json_pull *jp, unsigned z, unsigned x, unsigned y)
|
||||
sf.has_id = true;
|
||||
}
|
||||
|
||||
std::map<std::string, layermap_entry> &layermap = (*layermaps)[tiling_seg];
|
||||
|
||||
for (size_t i = 0; i < properties->length; i++) {
|
||||
serial_val v;
|
||||
v.type = -1;
|
||||
@@ -358,6 +370,27 @@ serial_feature parse_feature(json_pull *jp, unsigned z, unsigned x, unsigned y)
|
||||
|
||||
if (v.type >= 0) {
|
||||
sf.kv.insert(std::pair<std::string, serial_val>(std::string(properties->keys[i]->string), v));
|
||||
|
||||
if (layermap.count(layername) == 0) {
|
||||
layermap_entry lme = layermap_entry(layermap.size());
|
||||
lme.minzoom = z;
|
||||
lme.maxzoom = z;
|
||||
|
||||
layermap.insert(std::pair<std::string, layermap_entry>(layername, lme));
|
||||
}
|
||||
|
||||
type_and_string tas;
|
||||
tas.string = std::string(properties->keys[i]->string);
|
||||
tas.type = v.type;
|
||||
|
||||
auto fk = layermap.find(layername);
|
||||
if (z < fk->second.minzoom) {
|
||||
fk->second.minzoom = z;
|
||||
}
|
||||
if (z > fk->second.maxzoom) {
|
||||
fk->second.maxzoom = z;
|
||||
}
|
||||
fk->second.file_keys.insert(tas);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user