Skip to content

Commit

Permalink
Add an option to retain N times as many points as usual at each zoom
Browse files Browse the repository at this point in the history
  • Loading branch information
e-n-f committed Dec 15, 2023
1 parent 15a3e31 commit 8348ffc
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ unsigned int drop_denser = 0;
std::map<std::string, serial_val> set_attributes;
unsigned long long preserve_point_density_threshold = 0;
long long extend_zooms_max = 0;
double retain_points_multiplier = 1;

std::vector<order_field> order_by;
bool order_reverse;
Expand Down Expand Up @@ -1058,7 +1059,10 @@ void prep_drop_states(struct drop_state *ds, int maxzoom, int basezoom, double d
ds[i].interval = 0;

if (i < basezoom) {
ds[i].interval = std::exp(std::log(droprate) * (basezoom - i));
ds[i].interval = std::exp(std::log(droprate) * (basezoom - i)) / retain_points_multiplier;
if (ds[i].interval < 1) {
ds[i].interval = 1;
}
}

ds[i].seq = 0;
Expand Down Expand Up @@ -2705,7 +2709,10 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i

size_t i = 0;
for (int z = 0; z <= basezoom; z++) {
double keep_fraction = 1.0 / std::exp(std::log(droprate) * (basezoom - z));
double keep_fraction = 1.0 / std::exp(std::log(droprate) * (basezoom - z)) / retain_points_multiplier;
if (keep_fraction > 1) {
keep_fraction = 1;
}
size_t keep_count = ddv.size() * keep_fraction;

for (; i < keep_count && i < ddv.size(); i++) {
Expand Down Expand Up @@ -3150,6 +3157,7 @@ int main(int argc, char **argv) {

{"Dropping a fixed fraction of features by zoom level", 0, 0, 0},
{"drop-rate", required_argument, 0, 'r'},
{"retain-points-multiplier", required_argument, 0, '~'},
{"base-zoom", required_argument, 0, 'B'},
{"drop-denser", required_argument, 0, '~'},
{"limit-base-zoom-to-maximum-zoom", no_argument, &prevent[P_BASEZOOM_ABOVE_MAXZOOM], 1},
Expand Down Expand Up @@ -3370,6 +3378,8 @@ int main(int argc, char **argv) {
preserve_point_density_threshold = atoll_require(optarg, "Preserve point density threshold");
} else if (strcmp(opt, "extend-zooms-if-still-dropping-maximum") == 0) {
extend_zooms_max = atoll_require(optarg, "Maximum number by which to extend zooms");
} else if (strcmp(opt, "retain-points-multiplier") == 0) {
retain_points_multiplier = atof_require(optarg, "Multiply the fraction of points retained by zoom level");
} else {
fprintf(stderr, "%s: Unrecognized option --%s\n", argv[0], opt);
exit(EXIT_ARGS);
Expand Down

0 comments on commit 8348ffc

Please sign in to comment.