From bdc0f207aeaad8b12a6297ef9884e4bc7b7b0acc Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Wed, 24 Jan 2024 11:14:50 -0800 Subject: [PATCH] Don't convert types of attributes without accumulators --- clip.cpp | 13 +++++++++++-- evaluator.cpp | 4 ---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/clip.cpp b/clip.cpp index 4a704be2..8a7d6e1d 100644 --- a/clip.cpp +++ b/clip.cpp @@ -815,8 +815,17 @@ static void feature_out(std::vector const &features, mvt_layer &ou std::vector full_values; for (size_t i = 0; i + 1 < features[0].tags.size(); i += 2) { - full_keys.push_back(features[0].layer->keys[features[0].tags[i]]); - full_values.push_back(mvt_value_to_serial_val(features[0].layer->values[features[0].tags[i + 1]])); + auto f = attribute_accum.find(features[0].layer->keys[features[0].tags[i]]); + if (f != attribute_accum.end()) { + // this attribute has an accumulator, so convert it + full_keys.push_back(features[0].layer->keys[features[0].tags[i]]); + full_values.push_back(mvt_value_to_serial_val(features[0].layer->values[features[0].tags[i + 1]])); + } else { + // otherwise just tag it directly onto the output feature + if (keep.size() == 0 || keep.find(features[0].layer->keys[features[0].tags[i]]) != keep.end()) { + outlayer.tag(outfeature, features[0].layer->keys[features[0].tags[i]], features[0].layer->values[features[0].tags[i + 1]]); + } + } } // accumulate whatever attributes are specified to be accumulated diff --git a/evaluator.cpp b/evaluator.cpp index 21507f36..040f43f5 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -667,10 +667,6 @@ json_object *parse_filter(const char *s) { bool evaluate(mvt_feature const &feat, mvt_layer const &layer, json_object *filter, std::set &exclude_attributes, int z) { if (filter != NULL) { - if (filter->type == JSON_TRUE) { - return true; - } - std::map attributes; for (size_t t = 0; t + 1 < feat.tags.size(); t += 2) {