diff --git a/tile.cpp b/tile.cpp index bcebbe24..31ddee4d 100644 --- a/tile.cpp +++ b/tile.cpp @@ -2634,7 +2634,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch line_detail++; // to keep it the same when the loop decrements it continue; } else if (mingap < ULONG_MAX && (additional[A_DROP_DENSEST_AS_NEEDED] || additional[A_COALESCE_DENSEST_AS_NEEDED] || additional[A_CLUSTER_DENSEST_AS_NEEDED])) { - mingap_fraction = mingap_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.80; + mingap_fraction = std::min(1.0, mingap_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.80); unsigned long long m = choose_mingap(gaps, mingap_fraction, mingap); if (m > mingap) { mingap = m; @@ -2652,7 +2652,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch exit(EXIT_INCOMPLETE); } } else if (additional[A_DROP_SMALLEST_AS_NEEDED] || additional[A_COALESCE_SMALLEST_AS_NEEDED]) { - minextent_fraction = minextent_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.75; + minextent_fraction = std::min(1.0, minextent_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.75); long long m = choose_minextent(extents, minextent_fraction, minextent); if (m > minextent) { minextent = m; @@ -2673,7 +2673,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch // The 95% is a guess to avoid too many retries // and probably actually varies based on how much duplicated metadata there is - mindrop_sequence_fraction = mindrop_sequence_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.95; + mindrop_sequence_fraction = std::min(1.0, mindrop_sequence_fraction * adjusted_max_tile_features / adjusted_feature_count * 0.95); unsigned long long m = choose_mindrop_sequence(drop_sequences, mindrop_sequence_fraction, mindrop_sequence); if (m > mindrop_sequence) { mindrop_sequence = m; @@ -2753,7 +2753,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch } line_detail++; // to keep it the same when the loop decrements it } else if (mingap < ULONG_MAX && (additional[A_DROP_DENSEST_AS_NEEDED] || additional[A_COALESCE_DENSEST_AS_NEEDED] || additional[A_CLUSTER_DENSEST_AS_NEEDED])) { - mingap_fraction = mingap_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.80; + mingap_fraction = std::min(1.0, mingap_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.80); unsigned long long m = choose_mingap(gaps, mingap_fraction, mingap); if (m > mingap) { mingap = m; @@ -2771,7 +2771,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch exit(EXIT_INCOMPLETE); } } else if (additional[A_DROP_SMALLEST_AS_NEEDED] || additional[A_COALESCE_SMALLEST_AS_NEEDED]) { - minextent_fraction = minextent_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.75; + minextent_fraction = std::min(1.0, minextent_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.75); long long m = choose_minextent(extents, minextent_fraction, minextent); if (m > minextent) { minextent = m; @@ -2789,7 +2789,7 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch exit(EXIT_INCOMPLETE); } } else if (feature_count > layers.size() && (additional[A_DROP_FRACTION_AS_NEEDED] || additional[A_COALESCE_FRACTION_AS_NEEDED] || prevent[P_DYNAMIC_DROP])) { - mindrop_sequence_fraction = mindrop_sequence_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.75; + mindrop_sequence_fraction = std::min(1.0, mindrop_sequence_fraction * adjusted_max_tile_size / adjusted_tile_size * 0.75); unsigned long long m = choose_mindrop_sequence(drop_sequences, mindrop_sequence_fraction, mindrop_sequence); if (m > mindrop_sequence) { mindrop_sequence = m;