From 399c7f0780da1a491865c6426832e1b3f37c860e Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Sun, 29 Sep 2024 18:16:23 -0700 Subject: [PATCH] Fix output of features added to the bin after its closure --- clip.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/clip.cpp b/clip.cpp index db826d61..204800bd 100644 --- a/clip.cpp +++ b/clip.cpp @@ -1611,24 +1611,6 @@ mvt_tile assign_to_bins(mvt_tile const &features, std::vector const & } else /* EXIT */ { auto const &found = active.find({e.layer, e.feature}); if (found != active.end()) { - if (outfeatures[found->outfeature].size() > 1) { - feature_out(outfeatures[found->outfeature], outlayer, - keep, exclude, exclude_prefix, attribute_accum, - tile_stringpool, accumulate_numeric); - mvt_feature &nfeature = outlayer.features.back(); - mvt_value val; - val.type = mvt_uint; - val.numeric_value.uint_value = outfeatures[found->outfeature].size() - 1; - - std::string attrname; - if (accumulate_numeric.size() == 0) { - attrname = "tippecanoe:count"; - } else { - attrname = accumulate_numeric + ":count"; - } - outlayer.tag(nfeature, attrname, val); - } - active.erase(found); } else { fprintf(stderr, "event mismatch: can't happen\n"); @@ -1637,6 +1619,26 @@ mvt_tile assign_to_bins(mvt_tile const &features, std::vector const & } } + for (size_t i = 0; i < outfeatures.size(); i++) { + if (outfeatures[i].size() > 1) { + feature_out(outfeatures[i], outlayer, + keep, exclude, exclude_prefix, attribute_accum, + tile_stringpool, accumulate_numeric); + mvt_feature &nfeature = outlayer.features.back(); + mvt_value val; + val.type = mvt_uint; + val.numeric_value.uint_value = outfeatures[i].size() - 1; + + std::string attrname; + if (accumulate_numeric.size() == 0) { + attrname = "tippecanoe:count"; + } else { + attrname = accumulate_numeric + ":count"; + } + outlayer.tag(nfeature, attrname, val); + } + } + mvt_tile ret; ret.layers.push_back(outlayer); return ret;