Don't keep tilestats for features that are filtered out in tile-join

This commit is contained in:
Eric Fischer 2017-07-19 16:53:53 -07:00
parent 97d0b2a1b5
commit 855e344552
4 changed files with 12 additions and 6 deletions

View File

@ -550,7 +550,7 @@ std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::
} else {
for (auto val : fk->second.sample_values) {
auto pt = std::lower_bound(fk2->second.sample_values.begin(), fk2->second.sample_values.end(), val);
if (pt == fk2->second.sample_values.end() || *pt != val) { // not found
if (pt == fk2->second.sample_values.end() || *pt != val) { // not found
fk2->second.sample_values.insert(pt, val);
if (fk2->second.sample_values.size() > 1000) {
@ -610,7 +610,7 @@ void add_to_file_keys(std::map<std::string, type_and_string_stats> &file_keys, s
}
auto pt = std::lower_bound(fka->second.sample_values.begin(), fka->second.sample_values.end(), val);
if (pt == fka->second.sample_values.end() || *pt != val) { // not found
if (pt == fka->second.sample_values.end() || *pt != val) { // not found
fka->second.sample_values.insert(pt, val);
if (fka->second.sample_values.size() > 1000) {

View File

@ -14,7 +14,7 @@ struct type_and_string {
};
struct type_and_string_stats {
std::vector<type_and_string> sample_values; // sorted
std::vector<type_and_string> sample_values; // sorted
double min = INFINITY;
double max = -INFINITY;
int type = 0;

File diff suppressed because one or more lines are too long

View File

@ -105,6 +105,8 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
mvt_feature outfeature;
int matched = 0;
std::map<std::string, type_and_string> for_tilestats;
if (feat.has_id) {
outfeature.has_id = true;
outfeature.id = feat.id;
@ -158,7 +160,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
tas.type = type;
tas.string = value;
add_to_file_keys(file_keys->second.file_keys, key, tas);
for_tilestats.insert(std::pair<std::string, type_and_string>(key, tas));
}
if (header.size() > 0 && strcmp(key, header[0].c_str()) == 0) {
@ -210,7 +212,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
tas.type = outval.type;
tas.string = joinval;
add_to_file_keys(file_keys->second.file_keys, joinkey, tas);
for_tilestats.insert(std::pair<std::string, type_and_string>(joinkey, tas));
}
}
}
@ -241,6 +243,10 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map<std::st
features_added++;
outlayer.features.push_back(outfeature);
for (auto attr : for_tilestats) {
add_to_file_keys(file_keys->second.file_keys, attr.first, attr.second);
}
if (z < file_keys->second.minzoom) {
file_keys->second.minzoom = z;
}