From 9d4a2f7d290701b58e1c5e64efe7ecaa7ed99afc Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Fri, 11 Oct 2024 11:51:22 -0700 Subject: [PATCH] Revert "Revert "Limit feature expansion from multiplier density to 2x"" This reverts commit 44a683d80816f899da14a47d4f7467823d5c0701. --- serial.hpp | 3 ++- tile.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/serial.hpp b/serial.hpp index 61cd5515..b40cf2ed 100644 --- a/serial.hpp +++ b/serial.hpp @@ -94,10 +94,11 @@ struct serial_feature { #define FEATURE_DROPPED -1 #define FEATURE_KEPT 0 -#define FEATURE_NO_REALLY_KEEP_IT_AROUND INT_MAX +#define FEATURE_ADDED_FOR_MULTIPLIER_DENSITY INT_MAX // <0: dropped // 0: kept // >0: sequence number of additional feature kept by retain-points-multiplier + // INT_MAX: additional feature kept by preserve-multiplier-density-threshold int dropped = FEATURE_DROPPED; // was this feature dropped by rate? // unsigned long long drop_by; // dot-dropping priority diff --git a/tile.cpp b/tile.cpp index b924bba8..992cadf4 100644 --- a/tile.cpp +++ b/tile.cpp @@ -1237,9 +1237,10 @@ static serial_feature next_feature(decompressor *geoms, std::atomic * } else if (z + extra_multiplier_zooms >= feature_minzoom && count->second + 1 < retain_points_multiplier) { count->second++; sf.dropped = count->second; - } else if (preserve_multiplier_density_threshold > 0 && + } else if (preserve_multiplier_density_threshold > 0 && count->second + 1 < 2 * retain_points_multiplier && sf.gap > ((1LL << (32 - z)) / preserve_multiplier_density_threshold) * ((1LL << (32 - z)) / preserve_multiplier_density_threshold)) { - sf.dropped = FEATURE_NO_REALLY_KEEP_IT_AROUND; + count->second++; + sf.dropped = FEATURE_ADDED_FOR_MULTIPLIER_DENSITY; } else { sf.dropped = FEATURE_DROPPED; } @@ -1893,7 +1894,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch } else { can_stop_early = false; - if (sf.dropped != FEATURE_DROPPED && sf.dropped != FEATURE_NO_REALLY_KEEP_IT_AROUND) { + if (sf.dropped != FEATURE_DROPPED && sf.dropped != FEATURE_ADDED_FOR_MULTIPLIER_DENSITY) { // Does the current multiplier cluster already have too many features? // (Because we are dropping dynamically, and we have already filled the // cluster with features that were dynamically dropped from being @@ -2140,7 +2141,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch if (sf.dropped == FEATURE_KEPT) { layer.multiplier_cluster_size = 1; lead_features_count++; - } else if (sf.dropped == FEATURE_NO_REALLY_KEEP_IT_AROUND) { + } else if (sf.dropped == FEATURE_ADDED_FOR_MULTIPLIER_DENSITY) { other_multiplier_cluster_features_count++; } else { layer.multiplier_cluster_size++;