Add an option to specify the size of tiny polygons

This commit is contained in:
Erica Fischer
2022-08-23 13:20:42 -07:00
parent 5158576366
commit 3f8fb2177e
38 changed files with 1620 additions and 1410 deletions
+1
View File
@@ -479,6 +479,7 @@ the same layer, enclose them in an `all` expression so they will all be evaluate
* `-pS` or `--simplify-only-low-zooms`: Don't simplify lines and polygons at maxzoom (but do simplify at lower zooms)
* `-pn` or `--no-simplification-of-shared-nodes`: Don't simplify away nodes that appear in more than one feature or are used multiple times within the same feature, so that the intersection node will not be lost from intersecting roads. (This will not be effective if you also use `--coalesce` or `--detect-shared-borders`.)
* `-pt` or `--no-tiny-polygon-reduction`: Don't combine the area of very small polygons into small squares that represent their combined area.
* `--tiny-polygon-size=`_size_: Use the specified _size_ for tiny polygons instead of the default 2. Anything above 6 or so will lead to visible artifacts with the default tile detail.
### Attempts to improve shared polygon boundaries
+4 -4
View File
@@ -517,7 +517,7 @@ drawvec simple_clip_poly(drawvec &geom, int z, int buffer) {
drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double *accum_area) {
drawvec out;
long long pixel = (1 << (32 - detail - z)) * 2;
const long long pixel = (1 << (32 - detail - z)) * tiny_polygon_size;
*reduced = true;
bool included_last_outer = false;
@@ -552,9 +552,9 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double
// XXX use centroid;
out.push_back(draw(VT_MOVETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x + pixel / 2, geom[i].y - pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x + pixel / 2, geom[i].y + pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2, geom[i].y + pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2 + pixel));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2 + pixel));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2));
*accum_area -= pixel * pixel;
+4
View File
@@ -77,6 +77,7 @@ double simplification = 1;
size_t max_tile_size = 500000;
size_t max_tile_features = 200000;
int cluster_distance = 0;
int tiny_polygon_size = 2;
long justx = -1, justy = -1;
std::string attribute_for_id = "";
@@ -2699,6 +2700,7 @@ int main(int argc, char **argv) {
{"no-line-simplification", no_argument, &prevent[P_SIMPLIFY], 1},
{"simplify-only-low-zooms", no_argument, &prevent[P_SIMPLIFY_LOW], 1},
{"no-tiny-polygon-reduction", no_argument, &prevent[P_TINY_POLYGON_REDUCTION], 1},
{"tiny-polygon-size", required_argument, 0, '~'},
{"no-simplification-of-shared-nodes", no_argument, &prevent[P_SIMPLIFY_SHARED_NODES], 1},
{"Attempts to improve shared polygon boundaries", 0, 0, 0},
@@ -2836,6 +2838,8 @@ int main(int argc, char **argv) {
fprintf(stderr, "%s: %s: minimum maxzoom can be at most %d\n", argv[0], optarg, MAX_ZOOM);
exit(EXIT_FAILURE);
}
} else if (strcmp(opt, "tiny-polygon-size") == 0) {
tiny_polygon_size = atoi(optarg);
} else {
fprintf(stderr, "%s: Unrecognized option --%s\n", argv[0], opt);
exit(EXIT_FAILURE);
+1
View File
@@ -51,6 +51,7 @@ extern size_t max_tile_size;
extern size_t max_tile_features;
extern int cluster_distance;
extern std::string attribute_for_id;
extern int tiny_polygon_size;
int mkstemp_cloexec(char *name);
FILE *fopen_oflag(const char *name, const char *mode, int oflag);
+2
View File
@@ -610,6 +610,8 @@ the line or polygon within one tile unit of its proper location. You can probabl
\fB\fC\-pn\fR or \fB\fC\-\-no\-simplification\-of\-shared\-nodes\fR: Don't simplify away nodes that appear in more than one feature or are used multiple times within the same feature, so that the intersection node will not be lost from intersecting roads. (This will not be effective if you also use \fB\fC\-\-coalesce\fR or \fB\fC\-\-detect\-shared\-borders\fR\&.)
.IP \(bu 2
\fB\fC\-pt\fR or \fB\fC\-\-no\-tiny\-polygon\-reduction\fR: Don't combine the area of very small polygons into small squares that represent their combined area.
.IP \(bu 2
\fB\fC\-\-tiny\-polygon\-size=\fR\fIsize\fP: Use the specified \fIsize\fP for tiny polygons instead of the default 2. Anything above 6 or so will lead to visible artifacts with the default tile detail.
.RE
.SS Attempts to improve shared polygon boundaries
.RS
+6
View File
@@ -306,6 +306,12 @@ std::string stringify_strategies(std::vector<strategy> const &strategies) {
any = true;
}
if (strategies[i].tiny_polygons > 0) {
state.json_write_string("tiny_polygons");
state.json_write_number(strategies[i].tiny_polygons);
any = true;
}
if (strategies[i].tile_size > 0) {
state.json_write_string("tile_size_desired");
state.json_write_number(strategies[i].tile_size);
+6 -6
View File
@@ -300,13 +300,13 @@ struct sorted_value {
std::string val;
size_t orig;
bool operator<(const sorted_value &sv) const {
bool operator<(const sorted_value &sv) const {
if (val < sv.val) {
return true;
} else {
return false;
}
}
return true;
} else {
return false;
}
}
};
std::string mvt_tile::encode() {
File diff suppressed because one or more lines are too long
@@ -8,6 +8,7 @@
"maxzoom": "1",
"minzoom": "0",
"name": "tests/coalesce-id/out/-z1_--coalesce_--reorder.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 2 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "11",
"minzoom": "11",
"name": "tests/coalesce-tract/out/-P_--coalesce_--reorder_-z11_-Z11_-y_STATEFP10_-y_COUNTYFP10_-l_merged.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"tiny_polygons\": 6 } ]",
"type": "overlay",
"version": "2"
}, "features": [
+1
View File
@@ -8,6 +8,7 @@
"maxzoom": "2",
"minzoom": "0",
"name": "tests/curve/out/-z2.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 1 }, { \"tiny_polygons\": 4 } ]",
"type": "overlay",
"version": "2"
}, "features": [
+1
View File
@@ -8,6 +8,7 @@
"maxzoom": "2",
"minzoom": "0",
"name": "tests/curve/out/-z2_--no-clipping.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 1 }, { \"tiny_polygons\": 10 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "2",
"minzoom": "0",
"name": "tests/curve/out/-z2_--no-duplication.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 6 }, { \"tiny_polygons\": 6 } ]",
"type": "overlay",
"version": "2"
}, "features": [
+1
View File
@@ -8,6 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/dateline/out/-z5.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { \"tiny_polygons\": 1 }, { }, { \"tiny_polygons\": 1 } ]",
"type": "overlay",
"version": "2"
}, "features": [
+1
View File
@@ -8,6 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/dateline/out/-z5_-b0.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { \"tiny_polygons\": 1 }, { }, { } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "2",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/--coalesce_-z2_-Ccat.json.check.mbtiles",
"strategies": "[ { }, { }, { \"tiny_polygons\": 1 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "5",
"minzoom": "5",
"name": "tests/ne_110m_admin_0_countries/out/-R5%17%11.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { }, { }, { \"tiny_polygons\": 1 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-densest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 169, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 186, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 157, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 118, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 51, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"dropped_as_needed\": 169, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 186, \"tiny_polygons\": 1, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 157, \"tiny_polygons\": 2, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 118, \"tiny_polygons\": 12, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 51, \"tiny_polygons\": 20, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 47 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-fraction-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 166, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 187, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 188, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 187, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 148, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"dropped_as_needed\": 166, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 187, \"tiny_polygons\": 1, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 188, \"tiny_polygons\": 1, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 187, \"tiny_polygons\": 6, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 148, \"tiny_polygons\": 13, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 47 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--drop-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 197, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 189, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 155, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 62, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 197, \"tiny_polygons\": 1, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 189, \"tiny_polygons\": 2, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 155, \"tiny_polygons\": 12, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 62, \"tiny_polygons\": 20, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 47 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-ae_-zg_-M5000_--force-feature-limit.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 647, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 338, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 221, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 94, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 9, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"dropped_as_needed\": 647, \"tile_size_desired\": 39240 }, { \"dropped_as_needed\": 338, \"tiny_polygons\": 6, \"tile_size_desired\": 25139 }, { \"dropped_as_needed\": 221, \"tiny_polygons\": 4, \"tile_size_desired\": 21223 }, { \"dropped_as_needed\": 94, \"tiny_polygons\": 13, \"tile_size_desired\": 10752 }, { \"dropped_as_needed\": 9, \"tiny_polygons\": 20, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 47 } ]",
"type": "overlay",
"version": "2"
}, "features": [
File diff suppressed because one or more lines are too long
@@ -8,6 +8,7 @@
"maxzoom": "3",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z3_-ai.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 2 }, { \"tiny_polygons\": 3 }, { \"tiny_polygons\": 12 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z4_-yname.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 2 }, { \"tiny_polygons\": 3 }, { \"tiny_polygons\": 12 }, { \"tiny_polygons\": 21 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z4_-yname_--drop-polygons.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 172 }, { \"dropped_by_rate\": 203 }, { \"dropped_by_rate\": 188 }, { \"dropped_by_rate\": 153 }, { } ]",
"strategies": "[ { \"dropped_by_rate\": 172 }, { \"dropped_by_rate\": 203, \"tiny_polygons\": 1 }, { \"dropped_by_rate\": 188, \"tiny_polygons\": 1 }, { \"dropped_by_rate\": 153, \"tiny_polygons\": 8 }, { \"tiny_polygons\": 21 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z4_-yname_-S4.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 2 }, { \"tiny_polygons\": 3 }, { \"tiny_polygons\": 12 }, { \"tiny_polygons\": 21 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z4_-yname_-pD.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 45 }, { \"tiny_polygons\": 29 }, { \"tiny_polygons\": 70 }, { \"tiny_polygons\": 120 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,6 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z4_-yname_-pc.json.check.mbtiles",
"strategies": "[ { }, { \"tiny_polygons\": 2 }, { \"tiny_polygons\": 8 }, { \"tiny_polygons\": 32 }, { \"tiny_polygons\": 63 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-densest-as-needed.json.check.mbtiles",
"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 210, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 190, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 148, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 51, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 210, \"tiny_polygons\": 1, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 190, \"tiny_polygons\": 2, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 148, \"tiny_polygons\": 12, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 51, \"tiny_polygons\": 21, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 48 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-fraction-as-needed.json.check.mbtiles",
"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 216, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 219, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 218, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 182, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"coalesced_as_needed\": 704, \"detail_reduced\": 3, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 216, \"tiny_polygons\": 1, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 219, \"tiny_polygons\": 1, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 218, \"tiny_polygons\": 5, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 182, \"tiny_polygons\": 14, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 48 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--coalesce-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"coalesced_as_needed\": 1431, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 1040, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 800, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 190, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 72, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"coalesced_as_needed\": 1431, \"tile_size_desired\": 39238 }, { \"coalesced_as_needed\": 1040, \"tiny_polygons\": 1, \"tile_size_desired\": 25142 }, { \"coalesced_as_needed\": 800, \"tiny_polygons\": 2, \"tile_size_desired\": 21224 }, { \"coalesced_as_needed\": 190, \"tiny_polygons\": 8, \"tile_size_desired\": 10751 }, { \"coalesced_as_needed\": 72, \"tiny_polygons\": 21, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 48 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-z5_-M5000_--drop-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39238 }, { \"dropped_as_needed\": 197, \"tile_size_desired\": 25142 }, { \"dropped_as_needed\": 189, \"tile_size_desired\": 21224 }, { \"dropped_as_needed\": 155, \"tile_size_desired\": 10751 }, { \"dropped_as_needed\": 62, \"tile_size_desired\": 6595 }, { } ]",
"strategies": "[ { \"dropped_as_needed\": 173, \"tile_size_desired\": 39238 }, { \"dropped_as_needed\": 197, \"tiny_polygons\": 1, \"tile_size_desired\": 25142 }, { \"dropped_as_needed\": 189, \"tiny_polygons\": 2, \"tile_size_desired\": 21224 }, { \"dropped_as_needed\": 155, \"tiny_polygons\": 12, \"tile_size_desired\": 10751 }, { \"dropped_as_needed\": 62, \"tiny_polygons\": 21, \"tile_size_desired\": 6595 }, { \"tiny_polygons\": 48 } ]",
"type": "overlay",
"version": "2"
}, "features": [
+1 -1
View File
@@ -8,7 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/nullisland/out/-b0_-z4.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8, \"tiny_polygons\": 12 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -9,7 +9,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/nullisland/out/-b0_-z4_-ANullIsland.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8, \"tiny_polygons\": 12 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -8,7 +8,7 @@
"maxzoom": "4",
"minzoom": "0",
"name": "tests/nullisland/out/-b0_-z4_-NNullIsland.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"strategies": "[ { \"dropped_by_rate\": 4 }, { \"dropped_by_rate\": 8, \"tiny_polygons\": 12 }, { \"dropped_by_rate\": 8 }, { \"dropped_by_rate\": 3 }, { } ]",
"type": "overlay",
"version": "2"
}, "features": [
+7 -7
View File
@@ -175,11 +175,11 @@ std::string format_commandline(int argc, char **argv) {
// for jsonpull to call from C
char *dtoa_milo(double val) {
std::string s = milo::dtoa_milo(val);
char *dup = strdup(s.c_str());
if (dup == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
return dup;
std::string s = milo::dtoa_milo(val);
char *dup = strdup(s.c_str());
if (dup == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
return dup;
}
+3
View File
@@ -1983,6 +1983,9 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
if (sf.t == VT_POLYGON) {
if (!prevent[P_TINY_POLYGON_REDUCTION] && !additional[A_GRID_LOW_ZOOMS]) {
sf.geometry = reduce_tiny_poly(sf.geometry, z, line_detail, &reduced, &accum_area);
if (reduced) {
strategy->tiny_polygons++;
}
}
has_polygons = true;
}
+10 -6
View File
@@ -25,13 +25,15 @@ struct atomic_strategy {
std::atomic<size_t> dropped_as_needed;
std::atomic<size_t> coalesced_as_needed;
std::atomic<size_t> detail_reduced;
std::atomic<size_t> tiny_polygons;
atomic_strategy() :
dropped_by_rate(0),
dropped_by_gamma(0),
dropped_as_needed(0),
coalesced_as_needed(0),
detail_reduced(0) {
atomic_strategy()
: dropped_by_rate(0),
dropped_by_gamma(0),
dropped_as_needed(0),
coalesced_as_needed(0),
detail_reduced(0),
tiny_polygons(0) {
}
};
@@ -42,6 +44,7 @@ struct strategy {
size_t coalesced_as_needed = 0;
size_t detail_reduced = 0;
size_t tile_size = 0;
size_t tiny_polygons = 0;
strategy(const atomic_strategy &s, size_t ts) {
dropped_by_rate = s.dropped_by_rate;
@@ -50,6 +53,7 @@ struct strategy {
coalesced_as_needed = s.coalesced_as_needed;
detail_reduced = s.detail_reduced;
tile_size = ts;
tiny_polygons = s.tiny_polygons;
}
strategy() = default;