mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 16:35:40 +02:00
Add an option to retain N times as many points as usual at each zoom
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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++) {
|
||||
@@ -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},
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user