Extra coordinate precision; feature ordering; compression improvements

* Add an option to retain extra coordinate precision at maxzoom

* Make sure not to shift away the extra detail from coordinates

* Add an option to convert double-precision attributes to single

* Sort attribute values in tiles to make them compress a little better

* Slightly improve polygon simplification

By choosing a point that would be retained after simplification
to be the start/end point that always gets retained

* I regret making all of these tests involve polygons

* Add an option to specify the size of tiny polygons

* Fix accidental requiring of argument for --single-precision

* Guard against duplicate points when generating "sizes" for them

* Restore the intended behavior that tiny polygons don't get simplified

* Make the extra detail settable rather than always maximizing it

* Revert "Improve maxzoom guessing for tightly-clustered point data sources ()"

This reverts commit fec5e8354cff7ab6d64f00ea7db6da21c5c732c6.

* Add an option to prevent choosing a base zoom higher than the maxzoom

* Keep the drop rate high enough when the basezoom gets constrained

* Revert "Revert "Improve maxzoom guessing for tightly-clustered point data sources ()""

This reverts commit db6bc27d9e5bd6b5a218ba9a07117b4f1abb75fb.

* Add --order-by and --order-descending options

* Accept multiple --order-by and --order-descending-by sort keys
This commit is contained in:
Erica Fischer 2022-09-06 12:59:48 -07:00 committed by Erica Fischer
parent 4ea8a37611
commit a447dfc089
80 changed files with 13616 additions and 9945 deletions
CHANGELOG.mdREADME.mdgeometry.cppmain.cppmain.hpp
man
mbtiles.cppmvt.cppmvt.hppoptions.hppserial.cpp
tests
allow-existing
attribute-type/out
border/out
coalesce-id/out
coalesce-tract/out
curve/out
dateline/out
islands/out
join-population
muni
named/out
ne_110m_admin_0_countries/out
ne_110m_admin_1_states_provinces_lines/out
ne_110m_populated_places/out
nullisland/out
tl_2015_us_county/out
wraparound/out
wyalkatchem/out
text.cpptile.cpptile.hppversion.hpp

@ -1,3 +1,14 @@
## 2.5.0
* Add an option to add extra detail at maxzoom that does not factor into guessing
* Restore the intended behavior that tiny polygons don't get further simplified
* Add an option to use single-precision floating point in tiles
* Improve polygon simplification by choosing a better start/end point
* Sort attribute values in tiles to make them compress a little better
* Fix dropping of "largest" points when there are duplicate points
* Add an option to prevent guessing a basezoom higher than the maxzoom
* Add --order-by and --order-descending options
## 2.4.1
* Accept tilestats limiting options in tile-join, not just tippecanoe

@ -383,6 +383,7 @@ zoom level | precision (ft) | precision (m) | map scale
* `-d` _detail_ or `--full-detail=`_detail_: Detail at max zoom level (default 12, for tile resolution of 2^12=4096)
* `-D` _detail_ or `--low-detail=`_detail_: Detail at lower zoom levels (default 12, for tile resolution of 2^12=4096)
* `-m` _detail_ or `--minimum-detail=`_detail_: Minimum detail that it will try if tiles are too big at regular detail (default 7)
* `--extra-detail=`_detail_: Generate tiles with even more detail than the "full" detail at the max zoom level, to maximize location precision. These tiles may not work with some rendering software that internally limits detail to 12 or 13. The extra detail does not affect the choice of maxzoom guessing, the amount of simplification, or the "tiny polygon" threshold as `--full-detail` does. The tiles should look the same as they did without it, except that they will be more precise when overzoomed.
All internal math is done in terms of a 32-bit tile coordinate system, so 1/(2^32) of the size of Earth,
or about 1cm, is the smallest distinguishable distance. If _maxzoom_ + _detail_ > 32, no additional
@ -410,6 +411,7 @@ be reduced to the maximum that can be used with the specified _maxzoom_.
* `-pe` or `--empty-csv-columns-are-null`: Treat empty CSV columns as nulls rather than as empty strings.
* `-aI` or `--convert-stringified-ids-to-numbers`: If a feature ID is the string representation of a number, convert it to a plain number to use as the feature ID.
* `--use-attribute-for-id=`*name*: Use the attribute with the specified *name* as if it were specified as the feature ID. (If this attribute is a stringified number, you must also use `-aI` to convert it to a number.)
* `-pN` or `--single-precision`: Write double-precision numeric attribute values to tiles as single-precision to reduce tile size.
### Filtering features by attributes
@ -449,6 +451,7 @@ the same layer, enclose them in an `all` expression so they will all be evaluate
If you use `-Bg`, it will guess a zoom level that will keep at most 50,000 features in the densest tile.
You can also specify a marker-width with `-Bg`*width* to allow fewer features in the densest tile to
compensate for the larger marker, or `-Bf`*number* to allow at most *number* features in the densest tile.
* `--limit-base-zoom-to-maximum-zoom` or `-Pb`: Limit the guessed base zoom not to exceed the maxzoom, even if this would put more than the requested number of features in a base zoom tile.
* `-al` or `--drop-lines`: Let "dot" dropping at lower zooms apply to lines too
* `-ap` or `--drop-polygons`: Let "dot" dropping at lower zooms apply to polygons too
* `-K` _distance_ or `--cluster-distance=`_distance_: Cluster points (as with `--cluster-densest-as-needed`, but without the experimental discovery process) that are approximately within _distance_ of each other. The units are tile coordinates within a nominally 256-pixel tile, so the maximum value of 255 allows only one feature per tile. Values around 10 are probably appropriate for typical marker sizes. See `--cluster-densest-as-needed` below for behavior.
@ -477,6 +480,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
@ -496,6 +500,8 @@ the same layer, enclose them in an `all` expression so they will all be evaluate
* `-ao` or `--reorder`: Reorder features to put ones with the same attributes in sequence (instead of ones that are approximately spatially adjacent), to try to get them to coalesce. You probably want to use this if you use `--coalesce`.
* `-ar` or `--reverse`: Try reversing the directions of lines to make them coalesce and compress better. You probably don't want to use this.
* `-ah` or `--hilbert`: Put features in Hilbert Curve order instead of the usual Z-Order. This improves the odds that spatially adjacent features will be sequentially adjacent, and should improve density calculations and spatial coalescing. It should be the default eventually.
* `--order-by=`_attribute_: Order features by the specified _attribute_, in alphabetical or numerical order. Multiple `--order-by` and `--order-descending-by` options may be specified, the first being the primary sort key.
* `--order-descending-by=`_attribute_: Order features by the specified _attribute_, in reverse alphabetical or numerical order. Multiple `--order-by` and `--order-descending-by` options may be specified, the first being the primary sort key.
### Adding calculated attributes

@ -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;
@ -544,6 +544,11 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double
// inner rings must just have their area de-accumulated rather
// than being drawn since we don't really know where they are.
// i.e., this ring (inner or outer) is small enough that we are including it
// in a tiny polygon rather than letting it represent itself,
// OR it is an inner ring and we haven't output an outer ring for it to be
// cut out of, so we are just subtracting its area from the tiny polygon
// rather than trying to deal with it geometrically
if (std::fabs(area) <= pixel * pixel || (area < 0 && !included_last_outer)) {
// printf("area is only %f vs %lld so using square\n", area, pixel * pixel);
@ -552,9 +557,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;
@ -563,13 +568,17 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *reduced, double
if (area > 0) {
included_last_outer = false;
}
} else {
}
// i.e., this ring is large enough that it gets to represent itself
else {
// printf("area is %f so keeping instead of %lld\n", area, pixel * pixel);
for (size_t k = i; k <= j && k < geom.size(); k++) {
out.push_back(geom[k]);
}
// which means that the overall polygon has a real geometry,
// which means that it gets to be simplified.
*reduced = false;
if (area > 0) {
@ -950,14 +959,60 @@ drawvec fix_polygon(drawvec &geom) {
ring = tmp;
}
// calculate centroid
// a + 1 < size() because point 0 is duplicated at the end
long long xtotal = 0;
long long ytotal = 0;
long long count = 0;
for (size_t a = 0; a + 1 < ring.size(); a++) {
xtotal += ring[a].x;
ytotal += ring[a].y;
count++;
}
xtotal /= count;
ytotal /= count;
// figure out which point is furthest from the centroid
long long dist2 = 0;
long long furthest = 0;
for (size_t a = 0; a + 1 < ring.size(); a++) {
long long xd = ring[a].x - xtotal;
long long yd = ring[a].y - ytotal;
long long d2 = xd * xd + yd * yd;
if (d2 > dist2) {
dist2 = d2;
furthest = a;
}
}
// then figure out which point is furthest from *that*
long long dist2b = 0;
long long furthestb = 0;
for (size_t a = 0; a + 1 < ring.size(); a++) {
long long xd = ring[a].x - ring[furthest].x;
long long yd = ring[a].y - ring[furthest].y;
long long d2 = xd * xd + yd * yd;
if (d2 > dist2b) {
dist2b = d2;
furthestb = a;
}
}
// rotate ring so the furthest point is the duplicated one.
// the idea is that simplification will then be more efficient,
// never wasting the start and end points, which are always retained,
// on a point that has little impact on the shape.
// Copy ring into output, fixing the moveto/lineto ops if necessary because of
// reversal or closing
for (size_t a = 0; a < ring.size(); a++) {
size_t a2 = (a + furthestb) % (ring.size() - 1);
if (a == 0) {
out.push_back(draw(VT_MOVETO, ring[a].x, ring[a].y));
out.push_back(draw(VT_MOVETO, ring[a2].x, ring[a2].y));
} else {
out.push_back(draw(VT_LINETO, ring[a].x, ring[a].y));
out.push_back(draw(VT_LINETO, ring[a2].x, ring[a2].y));
}
}

@ -66,6 +66,7 @@
static int low_detail = 12;
static int full_detail = -1;
static int min_detail = 7;
int extra_detail = -1;
int quiet = 0;
int quiet_progress = 0;
@ -77,9 +78,13 @@ 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 = "";
std::vector<order_field> order_by;
bool order_reverse;
int prevent[256];
int additional[256];
@ -2250,6 +2255,10 @@ int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzo
}
}
if (obasezoom < 0 && basezoom > maxzoom && prevent[P_BASEZOOM_ABOVE_MAXZOOM]) {
basezoom = maxzoom;
}
if (obasezoom < 0 && basezoom > maxzoom) {
fprintf(stderr, "Couldn't find a suitable base zoom. Working from the other direction.\n");
if (gamma == 0) {
@ -2653,6 +2662,7 @@ int main(int argc, char **argv) {
{"full-detail", required_argument, 0, 'd'},
{"low-detail", required_argument, 0, 'D'},
{"minimum-detail", required_argument, 0, 'm'},
{"extra-detail", required_argument, 0, '~'},
{"Filtering feature attributes", 0, 0, 0},
{"exclude", required_argument, 0, 'x'},
@ -2666,6 +2676,7 @@ int main(int argc, char **argv) {
{"empty-csv-columns-are-null", no_argument, &prevent[P_EMPTY_CSV_COLUMNS], 1},
{"convert-stringified-ids-to-numbers", no_argument, &additional[A_CONVERT_NUMERIC_IDS], 1},
{"use-attribute-for-id", required_argument, 0, '~'},
{"single-precision", no_argument, &prevent[P_SINGLE_PRECISION], 1},
{"Filtering features by attributes", 0, 0, 0},
{"feature-filter-file", required_argument, 0, 'J'},
@ -2674,6 +2685,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'},
{"base-zoom", required_argument, 0, 'B'},
{"limit-base-zoom-to-maximum-zoom", no_argument, &prevent[P_BASEZOOM_ABOVE_MAXZOOM], 1},
{"drop-lines", no_argument, &additional[A_LINE_DROP], 1},
{"drop-polygons", no_argument, &additional[A_POLYGON_DROP], 1},
{"cluster-distance", required_argument, 0, 'K'},
@ -2697,6 +2709,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},
@ -2714,6 +2727,8 @@ int main(int argc, char **argv) {
{"coalesce", no_argument, &additional[A_COALESCE], 1},
{"reverse", no_argument, &additional[A_REVERSE], 1},
{"hilbert", no_argument, &additional[A_HILBERT], 1},
{"order-by", required_argument, 0, '~'},
{"order-descending-by", required_argument, 0, '~'},
{"Adding calculated attributes", 0, 0, 0},
{"calculate-feature-density", no_argument, &additional[A_CALCULATE_FEATURE_DENSITY], 1},
@ -2834,6 +2849,21 @@ 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 if (strcmp(opt, "extra-detail") == 0) {
extra_detail = atoi_require(optarg, "Extra detail");
if (extra_detail > 30) {
// So the maximum geometry delta of just under 2 tile extents
// is less than 2^31
fprintf(stderr, "%s: --extra-detail can be at most 30\n", argv[0]);
exit(EXIT_FAILURE);
}
} else if (strcmp(opt, "order-by") == 0) {
order_by.push_back(order_field(optarg, false));
} else if (strcmp(opt, "order-descending-by") == 0) {
order_by.push_back(order_field(optarg, true));
} else {
fprintf(stderr, "%s: Unrecognized option --%s\n", argv[0], opt);
exit(EXIT_FAILURE);
@ -3265,12 +3295,16 @@ int main(int argc, char **argv) {
}
}
geometry_scale = 32 - (full_detail + maxzoom);
if (geometry_scale < 0) {
if (extra_detail >= 0) {
geometry_scale = 0;
if (!guess_maxzoom) {
// This shouldn't be able to happen any more. Can it still?
fprintf(stderr, "Full detail + maxzoom > 32, so you are asking for more detail than is available.\n");
} else {
geometry_scale = 32 - (full_detail + maxzoom);
if (geometry_scale < 0) {
geometry_scale = 0;
if (!guess_maxzoom) {
// This shouldn't be able to happen any more. Can it still?
fprintf(stderr, "Full detail + maxzoom > 32, so you are asking for more detail than is available.\n");
}
}
}

@ -43,6 +43,7 @@ extern int quiet_progress;
extern json_logger logger;
extern double progress_interval;
extern std::atomic<double> last_progress;
extern int extra_detail;
extern size_t CPUS;
extern size_t TEMP_FILES;
@ -51,6 +52,19 @@ 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;
struct order_field {
std::string name;
bool descending;
order_field(std::string _name, bool _descending)
: name(_name),
descending(_descending) {
}
};
extern std::vector<order_field> order_by;
int mkstemp_cloexec(char *name);
FILE *fopen_oflag(const char *name, const char *mode, int oflag);

@ -475,6 +475,8 @@ zoom level precision (ft) precision (m) map scale
\fB\fC\-D\fR \fIdetail\fP or \fB\fC\-\-low\-detail=\fR\fIdetail\fP: Detail at lower zoom levels (default 12, for tile resolution of 2
.IP \(bu 2
\fB\fC\-m\fR \fIdetail\fP or \fB\fC\-\-minimum\-detail=\fR\fIdetail\fP: Minimum detail that it will try if tiles are too big at regular detail (default 7)
.IP \(bu 2
\fB\fC\-\-extra\-detail=\fR\fIdetail\fP: Generate tiles with even more detail than the "full" detail at the max zoom level, to maximize location precision. These tiles may not work with some rendering software that internally limits detail to 12 or 13. The extra detail does not affect the choice of maxzoom guessing, the amount of simplification, or the "tiny polygon" threshold as \fB\fC\-\-full\-detail\fR does. The tiles should look the same as they did without it, except that they will be more precise when overzoomed.
.RE
.PP
All internal math is done in terms of a 32\-bit tile coordinate system, so 1/(2 of the size of Earth,
@ -511,6 +513,8 @@ to specify how the named \fIattribute\fP is accumulated onto the attribute of th
\fB\fC\-aI\fR or \fB\fC\-\-convert\-stringified\-ids\-to\-numbers\fR: If a feature ID is the string representation of a number, convert it to a plain number to use as the feature ID.
.IP \(bu 2
\fB\fC\-\-use\-attribute\-for\-id=\fR\fIname\fP: Use the attribute with the specified \fIname\fP as if it were specified as the feature ID. (If this attribute is a stringified number, you must also use \fB\fC\-aI\fR to convert it to a number.)
.IP \(bu 2
\fB\fC\-pN\fR or \fB\fC\-\-single\-precision\fR: Write double\-precision numeric attribute values to tiles as single\-precision to reduce tile size.
.RE
.SS Filtering features by attributes
.RS
@ -561,6 +565,8 @@ If you use \fB\fC\-Bg\fR, it will guess a zoom level that will keep at most 50,0
You can also specify a marker\-width with \fB\fC\-Bg\fR\fIwidth\fP to allow fewer features in the densest tile to
compensate for the larger marker, or \fB\fC\-Bf\fR\fInumber\fP to allow at most \fInumber\fP features in the densest tile.
.IP \(bu 2
\fB\fC\-\-limit\-base\-zoom\-to\-maximum\-zoom\fR or \fB\fC\-Pb\fR: Limit the guessed base zoom not to exceed the maxzoom, even if this would put more than the requested number of features in a base zoom tile.
.IP \(bu 2
\fB\fC\-al\fR or \fB\fC\-\-drop\-lines\fR: Let "dot" dropping at lower zooms apply to lines too
.IP \(bu 2
\fB\fC\-ap\fR or \fB\fC\-\-drop\-polygons\fR: Let "dot" dropping at lower zooms apply to polygons too
@ -606,6 +612,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
@ -635,6 +643,10 @@ the line or polygon within one tile unit of its proper location. You can probabl
\fB\fC\-ar\fR or \fB\fC\-\-reverse\fR: Try reversing the directions of lines to make them coalesce and compress better. You probably don't want to use this.
.IP \(bu 2
\fB\fC\-ah\fR or \fB\fC\-\-hilbert\fR: Put features in Hilbert Curve order instead of the usual Z\-Order. This improves the odds that spatially adjacent features will be sequentially adjacent, and should improve density calculations and spatial coalescing. It should be the default eventually.
.IP \(bu 2
\fB\fC\-\-order\-by=\fR\fIattribute\fP: Order features by the specified \fIattribute\fP, in alphabetical or numerical order. Multiple \fB\fC\-\-order\-by\fR and \fB\fC\-\-order\-descending\-by\fR options may be specified, the first being the primary sort key.
.IP \(bu 2
\fB\fC\-\-order\-descending\-by=\fR\fIattribute\fP: Order features by the specified \fIattribute\fP, in reverse alphabetical or numerical order. Multiple \fB\fC\-\-order\-by\fR and \fB\fC\-\-order\-descending\-by\fR options may be specified, the first being the primary sort key.
.RE
.SS Adding calculated attributes
.RS

@ -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);

38
mvt.cpp

@ -296,6 +296,19 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) {
return true;
}
struct sorted_value {
std::string val;
size_t orig;
bool operator<(const sorted_value &sv) const {
if (val < sv.val) {
return true;
} else {
return false;
}
}
};
std::string mvt_tile::encode() {
std::string data;
@ -313,6 +326,8 @@ std::string mvt_tile::encode() {
layer_writer.add_string(3, layers[i].keys[j]); /* key */
}
std::vector<sorted_value> sorted_values;
for (size_t v = 0; v < layers[i].values.size(); v++) {
std::string value_string;
protozero::pbf_writer value_writer(value_string);
@ -340,7 +355,19 @@ std::string mvt_tile::encode() {
exit(EXIT_FAILURE);
}
layer_writer.add_message(4, value_string);
sorted_value sv;
sv.val = value_string;
sv.orig = v;
sorted_values.push_back(sv);
}
std::sort(sorted_values.begin(), sorted_values.end());
std::vector<size_t> mapping;
mapping.resize(sorted_values.size());
for (size_t v = 0; v < sorted_values.size(); v++) {
mapping[sorted_values[v].orig] = v;
layer_writer.add_message(4, sorted_values[v].val);
}
for (size_t f = 0; f < layers[i].features.size(); f++) {
@ -348,7 +375,12 @@ std::string mvt_tile::encode() {
protozero::pbf_writer feature_writer(feature_string);
feature_writer.add_enum(3, layers[i].features[f].type);
feature_writer.add_packed_uint32(2, std::begin(layers[i].features[f].tags), std::end(layers[i].features[f].tags));
std::vector<unsigned> sorted_tags = layers[i].features[f].tags;
for (size_t v = 1; v < sorted_tags.size(); v += 2) {
sorted_tags[v] = mapping[sorted_tags[v]];
}
feature_writer.add_packed_uint32(2, std::begin(sorted_tags), std::end(sorted_tags));
if (layers[i].features[f].has_id) {
feature_writer.add_uint64(1, layers[i].features[f].id);
@ -458,7 +490,7 @@ static std::string quote(std::string const &s) {
return buf;
}
std::string mvt_value::toString() {
std::string mvt_value::toString() const {
if (type == mvt_string) {
return quote(string_value);
} else if (type == mvt_int) {

@ -81,7 +81,7 @@ struct mvt_value {
} numeric_value;
bool operator<(const mvt_value &o) const;
std::string toString();
std::string toString() const;
mvt_value() {
this->type = mvt_double;

@ -29,6 +29,7 @@
#define P_SIMPLIFY ((int) 's')
#define P_SIMPLIFY_LOW ((int) 'S')
#define P_SIMPLIFY_SHARED_NODES ((int) 'n')
#define P_SINGLE_PRECISION ((int) 'N')
#define P_FEATURE_LIMIT ((int) 'f')
#define P_KILOBYTE_LIMIT ((int) 'k')
#define P_DYNAMIC_DROP ((int) 'd')
@ -42,6 +43,7 @@
#define P_USE_SOURCE_POLYGON_WINDING ((int) 'w')
#define P_REVERSE_SOURCE_POLYGON_WINDING ((int) 'W')
#define P_EMPTY_CSV_COLUMNS ((int) 'e')
#define P_BASEZOOM_ABOVE_MAXZOOM ((int) 'b')
extern int prevent[256];
extern int additional[256];

@ -596,6 +596,15 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) {
for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) {
coerce_value(sf.full_keys[i], sf.full_values[i].type, sf.full_values[i].s, sst->attribute_types);
if (prevent[P_SINGLE_PRECISION]) {
if (sf.full_values[i].type == mvt_double) {
// don't coerce integers to floats, since that is counterproductive
if (sf.full_values[i].s.find('.') != std::string::npos) {
sf.full_values[i].s = milo::dtoa_milo((float) atof(sf.full_values[i].s.c_str()));
}
}
}
if (sf.full_keys[i] == attribute_for_id) {
if (sf.full_values[i].type != mvt_double && !additional[A_CONVERT_NUMERIC_IDS]) {
static bool warned = false;

File diff suppressed because one or more lines are too long

@ -0,0 +1,95 @@
{ "type": "FeatureCollection", "properties": {
"bounds": "0.000000,0.000000,0.000000,0.000000",
"center": "0.000000,0.000000,0",
"description": "tests/attribute-type/out/-z0_-pN.json.check.mbtiles",
"format": "pbf",
"generator_options": "./tippecanoe -q -a@ -f -o tests/attribute-type/out/-z0_-pN.json.check.mbtiles -z0 -pN tests/attribute-type/in.json",
"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"booltype\": \"Mixed\", \"expect\": \"Mixed\", \"floattype\": \"Mixed\", \"inttype\": \"Mixed\", \"stringtype\": \"Mixed\"} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"in\",\"count\": 39,\"geometry\": \"Point\",\"attributeCount\": 5,\"attributes\": [{\"attribute\": \"booltype\",\"count\": 10,\"type\": \"mixed\",\"values\": [\"\",\"0\",0,1,\"[2,3]\",\"false\",false,\"null\",true,\"yes\"],\"min\": 0,\"max\": 1},{\"attribute\": \"expect\",\"count\": 14,\"type\": \"mixed\",\"values\": [0,\"2\",\"2.5\",3,5,5.599999904632568,6,\"[2,3]\",\"false\",false,\"null\",\"something\",\"true\",true],\"min\": 0,\"max\": 6},{\"attribute\": \"floattype\",\"count\": 9,\"type\": \"mixed\",\"values\": [\"\",\" 3\",\"5\",5.599999904632568,\"5.6\",\"[2,3]\",false,true,\"yes\"],\"min\": 5.599999904632568,\"max\": 5.599999904632568},{\"attribute\": \"inttype\",\"count\": 9,\"type\": \"mixed\",\"values\": [\"\",\" 3\",\"5\",5.599999904632568,\"5.6\",\"[2,3]\",false,true,\"yes\"],\"min\": 5.599999904632568,\"max\": 5.599999904632568},{\"attribute\": \"stringtype\",\"count\": 6,\"type\": \"mixed\",\"values\": [2,2.5,\"[2,3]\",false,\"something\",true],\"min\": 2,\"max\": 2.5}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/attribute-type/out/-z0_-pN.json.check.mbtiles",
"type": "overlay",
"version": "2"
}, "features": [
{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "null", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": 0, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "0", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": false, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "false", "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": true, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": 1, "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": 0, "expect": false }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "yes", "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "booltype": "[2,3]", "expect": true }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "expect": "null" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": 2, "expect": "2" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": 2.5, "expect": "2.5" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": true, "expect": "true" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": false, "expect": "false" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": "something", "expect": "something" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "stringtype": "[2,3]", "expect": "[2,3]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": "5", "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": "5.6", "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": 5.599999904632568, "expect": 6 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": true, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": false, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": "", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": "yes", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": " 3", "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "inttype": "[2,3]", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": "5", "expect": 5 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": "5.6", "expect": 5.599999904632568 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": 5.599999904632568, "expect": 5.599999904632568 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": true, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": false, "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": "", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": "yes", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": " 3", "expect": 3 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
,
{ "type": "Feature", "properties": { "floattype": "[2,3]", "expect": 0 }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } }
] }
] }
] }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -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": [

@ -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": [

@ -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": [

@ -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": [

@ -21,61 +21,61 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 0, "y": 1 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.572250 ], [ -155.874023, -5.615986 ], [ -155.961914, -5.615986 ], [ -155.917969, -5.572250 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.961914, -5.572250 ], [ -155.874023, -5.615986 ], [ -155.961914, -5.615986 ], [ -155.961914, -5.572250 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 1 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 173.671875, 0.131836 ], [ 173.715820, 0.131836 ], [ 173.715820, 0.043945 ], [ 173.671875, 0.043945 ], [ 173.671875, 0.131836 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 173.891602, 0.439449 ], [ 173.935547, 0.351560 ], [ 173.891602, 0.351560 ], [ 173.891602, 0.439449 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 1, "x": 1, "y": 0 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 173.671875, 0.175781 ], [ 173.715820, 0.175781 ], [ 173.715820, 0.087891 ], [ 173.671875, 0.087891 ], [ 173.671875, 0.175781 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 173.891602, 0.439449 ], [ 173.935547, 0.351560 ], [ 173.891602, 0.351560 ], [ 173.891602, 0.439449 ] ] ] } }
,
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.164062, 9.622414 ], [ 138.164062, 9.535749 ], [ 138.032227, 9.449062 ], [ 138.164062, 9.622414 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.164062, 9.622414 ], [ 138.164062, 9.535749 ], [ 138.032227, 9.449062 ], [ 138.120117, 9.579084 ], [ 138.164062, 9.622414 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 0, "y": 2 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.917969, -5.594118 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.939941, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ] ] ], [ [ [ -174.528809, -4.674980 ], [ -174.550781, -4.674980 ], [ -174.550781, -4.653080 ], [ -174.528809, -4.674980 ] ] ], [ [ [ -171.276855, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ] ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 3, "y": 2 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.329588 ], [ 173.913574, 0.417477 ] ] ], [ [ [ 173.364258, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ] ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 2, "x": 3, "y": 1 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.329588 ], [ 173.913574, 0.417477 ] ] ], [ [ [ 173.364258, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ] ] ] ] } }
,
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.164062, 9.557417 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.186035, 9.600750 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.186035, 9.600750 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 0, "y": 4 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.895996, -5.594118 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.506836, -4.674980 ] ] ], [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.550781, -4.653080 ], [ -174.528809, -4.653080 ] ] ], [ [ [ -171.276855, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ] ] ], [ [ [ -174.528809, -4.664030 ], [ -174.506836, -4.674980 ], [ -174.506836, -4.696879 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.664030 ] ] ], [ [ [ -171.276855, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ] ] ], [ [ [ -155.917969, -5.615986 ], [ -155.874023, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.917969, -5.615986 ] ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 7, "y": 4 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.364258, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 3, "x": 7, "y": 3 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.263671 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 174.221191, -0.505365 ], [ 174.243164, -0.527336 ], [ 174.221191, -0.527336 ], [ 174.221191, -0.505365 ] ] ], [ [ [ 173.540039, 0.197754 ], [ 173.540039, 0.175781 ], [ 173.518066, 0.175781 ], [ 173.518066, 0.197754 ], [ 173.540039, 0.197754 ] ] ], [ [ [ 173.364258, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ] ] ], [ [ [ 173.342285, 0.285643 ], [ 173.364258, 0.241699 ], [ 173.342285, 0.263671 ], [ 173.342285, 0.285643 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
,
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.186035, 9.600750 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.579084 ], [ 138.186035, 9.600750 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 138.186035, 9.600750 ], [ 138.186035, 9.579084 ], [ 138.164062, 9.579084 ], [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.076172, 9.427387 ], [ 138.054199, 9.427387 ], [ 138.054199, 9.470736 ], [ 138.120117, 9.557417 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.579084 ], [ 138.186035, 9.600750 ] ] ], [ [ [ 140.515137, 9.795678 ], [ 140.515137, 9.774025 ], [ 140.493164, 9.774025 ], [ 140.515137, 9.795678 ] ] ] ] } }
] }
] }
,
@ -183,31 +183,31 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 1, "y": 65 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -174.528809, -4.653080 ], [ -174.506836, -4.653080 ], [ -174.506836, -4.674980 ], [ -174.528809, -4.674980 ], [ -174.528809, -4.653080 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -174.528809, -4.674980 ], [ -174.550781, -4.674980 ], [ -174.550781, -4.653080 ], [ -174.528809, -4.674980 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 3, "y": 65 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -171.188965, -3.754634 ], [ -171.166992, -3.754634 ], [ -171.166992, -3.798484 ], [ -171.188965, -3.798484 ], [ -171.188965, -3.754634 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -171.276855, -4.434044 ], [ -171.232910, -4.455951 ], [ -171.276855, -4.455951 ], [ -171.276855, -4.434044 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 8, "y": 66 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.917969, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ], [ -155.917969, -5.594118 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.895996, -5.594118 ], [ -155.895996, -5.637853 ], [ -155.917969, -5.637853 ], [ -155.917969, -5.594118 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 8, "y": 65 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.917969, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.917969, -5.594118 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -155.939941, -5.594118 ], [ -155.874023, -5.615986 ], [ -155.939941, -5.615986 ], [ -155.939941, -5.594118 ] ] ] } }
] }
] }
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 113, "y": 60 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.164062, 9.557417 ], [ 138.208008, 9.557417 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.164062, 9.557417 ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "FSM-4943", "OBJECTID_1": 6464, "diss_me": 4943, "adm1_cod_1": "FSM-4943", "iso_3166_2": "FM-YAP", "wikipedia": "http://en.wikipedia.org/wiki/Yap_State", "iso_a2": "FM", "adm0_sr": 5, "name": "Yap", "code_hasc": "FM.YA", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 10, "datarank": 10, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 scale rank", "name_len": 3, "mapcolor9": 4, "mapcolor13": 13, "fips": "FM04", "woe_id": 2345343, "woe_label": "Yap, FM, Federated States of Micronesia", "woe_name": "Yap", "latitude": 9.581009, "longitude": 138.114, "sov_a3": "FSM", "adm0_a3": "FSM", "adm0_label": 5, "admin": "Federated States of Micronesia", "geonunit": "Federated States of Micronesia", "gu_a3": "FSM", "gn_id": 2081175, "gn_name": "State of Yap", "gns_id": -3741502, "gns_name": "Yap, State of", "gn_level": 1, "gn_a1_code": "FM.04", "gns_level": 1, "gns_adm1": "FM04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 138.186035, 9.600750 ], [ 138.186035, 9.514079 ], [ 138.142090, 9.535749 ], [ 138.054199, 9.427387 ], [ 138.120117, 9.579084 ], [ 138.142090, 9.557417 ], [ 138.186035, 9.600750 ] ] ] } }
] }
] }
,
@ -219,7 +219,7 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 7, "x": 125, "y": 63 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 128 }, "features": [
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.386230, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ], [ 173.386230, 0.241699 ] ] ], [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.395505 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.417477 ] ] ] ] } }
{ "type": "Feature", "properties": { "adm1_code": "KIR+99?", "OBJECTID_1": 3643, "diss_me": 10097, "adm1_cod_1": "KIR+99?", "iso_3166_2": "KI-", "iso_a2": "KI", "adm0_sr": 5, "code_hasc": "-99", "note": "KIR-99 (Kiribati minor island)", "provnum_ne": 0, "gadm_level": 0, "check_me": 0, "scalerank": 11, "datarank": 11, "area_sqkm": 0, "sameascity": -99, "labelrank": 20, "featurecla": "Admin-1 minor island", "name_len": 0, "mapcolor9": 6, "mapcolor13": 12, "woe_id": -99, "latitude": -4.689669, "longitude": -174.511, "sov_a3": "KIR", "adm0_a3": "KIR", "adm0_label": 7, "admin": "Kiribati", "geonunit": "Kiribati", "gu_a3": "KIR", "gn_id": 0, "gns_id": 0, "gn_level": 0, "gn_a1_code": "KI.", "gns_level": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 173.913574, 0.417477 ], [ 173.935547, 0.329588 ], [ 173.913574, 0.329588 ], [ 173.913574, 0.417477 ] ] ], [ [ [ 173.364258, 0.241699 ], [ 173.408203, 0.219726 ], [ 173.386230, 0.197754 ], [ 173.364258, 0.241699 ] ] ] ] } }
] }
] }
] }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,9 +1,9 @@
[
{ "zoom": 11, "x": 326, "y": 791, "bytes": 372, "compressed": true, "layers": { "muni": { "points": 14, "lines": 0, "polygons": 0, "extent": 4096 } } }
,
{ "zoom": 11, "x": 327, "y": 792, "bytes": 6481, "compressed": true, "layers": { "muni": { "points": 528, "lines": 0, "polygons": 0, "extent": 4096 } } }
{ "zoom": 11, "x": 327, "y": 792, "bytes": 6524, "compressed": true, "layers": { "muni": { "points": 528, "lines": 0, "polygons": 0, "extent": 4096 } } }
,
{ "zoom": 11, "x": 327, "y": 791, "bytes": 44376, "compressed": true, "layers": { "muni": { "points": 4285, "lines": 0, "polygons": 0, "extent": 4096 }, "subway": { "points": 19, "lines": 0, "polygons": 0, "extent": 4096 } } }
{ "zoom": 11, "x": 327, "y": 791, "bytes": 45272, "compressed": true, "layers": { "muni": { "points": 4285, "lines": 0, "polygons": 0, "extent": 4096 }, "subway": { "points": 19, "lines": 0, "polygons": 0, "extent": 4096 } } }
,
{ "zoom": 11, "x": 954, "y": 791, "bytes": 75, "compressed": true, "layers": { "muni": { "points": 12, "lines": 0, "polygons": 0, "extent": 4096 } } }
]

@ -8,7 +8,7 @@
"maxzoom": "13",
"minzoom": "11",
"name": "tests/muni/out/-Z11_-z13_-M10000.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"detail_reduced\": 4, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 6390, \"detail_reduced\": 3, \"tile_size_desired\": 10726 }, { } ]",
"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 18540, \"detail_reduced\": 4, \"tile_size_desired\": 10871 }, { \"dropped_by_rate\": 6390, \"detail_reduced\": 3, \"tile_size_desired\": 10708 }, { } ]",
"type": "overlay",
"version": "2"
}, "features": [

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -8,7 +8,7 @@
"maxzoom": "13",
"minzoom": "11",
"name": "tests/muni/out/-Z11_-z13_-M5000_-as.json.check.mbtiles",
"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 488, \"tile_size_desired\": 10978 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 1306, \"tile_size_desired\": 10726 }, { \"dropped_as_needed\": 3030, \"tile_size_desired\": 9566 } ]",
"strategies": "[ { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { }, { \"dropped_by_rate\": 4080, \"dropped_as_needed\": 482, \"tile_size_desired\": 10871 }, { \"dropped_by_rate\": 2973, \"dropped_as_needed\": 1304, \"tile_size_desired\": 10708 }, { \"dropped_as_needed\": 3034, \"tile_size_desired\": 9643 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@ -17,6 +17,8 @@
{ "type": "Feature", "properties": { "name": "Fort Cronkhite Parking Lot" }, "geometry": { "type": "Point", "coordinates": [ -122.538671, 37.832395 ] } }
,
{ "type": "Feature", "properties": { "name": "FIELD RD/Nike Site" }, "geometry": { "type": "Point", "coordinates": [ -122.527685, 37.829074 ] } }
,
{ "type": "Feature", "properties": { "name": "Field Rd & Bunker Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.523265, 37.831345 ] } }
] }
] }
,
@ -124,7 +126,7 @@
,
{ "type": "Feature", "properties": { "name": "Montgomery St & Moraga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.460394, 37.798560 ] } }
,
{ "type": "Feature", "properties": { "name": "Lincoln Blvd & Girard Rd" }, "geometry": { "type": "Point", "coordinates": [ -122.454128, 37.800765 ] } }
{ "type": "Feature", "properties": { "name": "Graham St & Moraga Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.459064, 37.797916 ] } }
,
{ "type": "Feature", "properties": { "name": "LETTERMAN DR/Tides Bldg" }, "geometry": { "type": "Point", "coordinates": [ -122.451854, 37.799408 ] } }
,
@ -192,7 +194,9 @@
,
{ "type": "Feature", "properties": { "name": "23rd Ave & Lawton St" }, "geometry": { "type": "Point", "coordinates": [ -122.481122, 37.757891 ] } }
,
{ "type": "Feature", "properties": { "name": "19th Ave & Judah St" }, "geometry": { "type": "Point", "coordinates": [ -122.476873, 37.761589 ] } }
{ "type": "Feature", "properties": { "name": "22nd Ave & Lawton St" }, "geometry": { "type": "Point", "coordinates": [ -122.479877, 37.757755 ] } }
,
{ "type": "Feature", "properties": { "name": "19th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.476315, 37.754124 ] } }
,
{ "type": "Feature", "properties": { "name": "Noriega St & 46th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.505584, 37.752903 ] } }
,
@ -214,6 +218,8 @@
,
{ "type": "Feature", "properties": { "name": "Sunset Blvd & Vicente St" }, "geometry": { "type": "Point", "coordinates": [ -122.494297, 37.738650 ] } }
,
{ "type": "Feature", "properties": { "name": "Ulloa St & 30th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.487259, 37.740721 ] } }
,
{ "type": "Feature", "properties": { "name": "Quintara St & 27th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.484598, 37.748322 ] } }
,
{ "type": "Feature", "properties": { "name": "19th Ave & Pacheco St" }, "geometry": { "type": "Point", "coordinates": [ -122.476058, 37.750426 ] } }
@ -254,6 +260,8 @@
,
{ "type": "Feature", "properties": { "name": "16th Ave & Noriega St" }, "geometry": { "type": "Point", "coordinates": [ -122.473226, 37.754260 ] } }
,
{ "type": "Feature", "properties": { "name": "9th Ave & Lawton St" }, "geometry": { "type": "Point", "coordinates": [ -122.466059, 37.758535 ] } }
,
{ "type": "Feature", "properties": { "name": "Lincoln Way & 7th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.464042, 37.765965 ] } }
,
{ "type": "Feature", "properties": { "name": "Irving St & 2nd Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.458677, 37.764473 ] } }
@ -268,7 +276,7 @@
,
{ "type": "Feature", "properties": { "name": "Hayes St & Shrader St" }, "geometry": { "type": "Point", "coordinates": [ -122.452540, 37.773089 ] } }
,
{ "type": "Feature", "properties": { "name": "Mcallister St & Lyon St" }, "geometry": { "type": "Point", "coordinates": [ -122.443357, 37.777160 ] } }
{ "type": "Feature", "properties": { "name": "Turk St & Central Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445288, 37.778924 ] } }
,
{ "type": "Feature", "properties": { "name": "Divisadero St & Sutter St" }, "geometry": { "type": "Point", "coordinates": [ -122.439966, 37.785165 ] } }
,
@ -292,6 +300,8 @@
,
{ "type": "Feature", "properties": { "name": "17th St & Diamond St" }, "geometry": { "type": "Point", "coordinates": [ -122.437520, 37.762437 ] } }
,
{ "type": "Feature", "properties": { "name": "Castro St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.435288, 37.764167 ] } }
,
{ "type": "Feature", "properties": { "name": "Grand View Ave & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.441168, 37.754057 ] } }
,
{ "type": "Feature", "properties": { "name": "16th Ave & Ortega St" }, "geometry": { "type": "Point", "coordinates": [ -122.473097, 37.752428 ] } }
@ -388,7 +398,7 @@
,
{ "type": "Feature", "properties": { "name": "Stockton St & Greenwich St" }, "geometry": { "type": "Point", "coordinates": [ -122.409539, 37.802223 ] } }
,
{ "type": "Feature", "properties": { "name": "Pacific Ave & Grant Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.406750, 37.797001 ] } }
{ "type": "Feature", "properties": { "name": "Union St & Montgomery St" }, "geometry": { "type": "Point", "coordinates": [ -122.404475, 37.801104 ] } }
,
{ "type": "Feature", "properties": { "name": "Broadway & Sansome St" }, "geometry": { "type": "Point", "coordinates": [ -122.401943, 37.798425 ] } }
,
@ -418,7 +428,7 @@
,
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Sutter St" }, "geometry": { "type": "Point", "coordinates": [ -122.421684, 37.787844 ] } }
,
{ "type": "Feature", "properties": { "name": "Hayes St & Fillmore St" }, "geometry": { "type": "Point", "coordinates": [ -122.431598, 37.775871 ] } }
{ "type": "Feature", "properties": { "name": "Mcallister St & Fillmore St" }, "geometry": { "type": "Point", "coordinates": [ -122.431426, 37.778652 ] } }
,
{ "type": "Feature", "properties": { "name": "Haight St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.427092, 37.772614 ] } }
,
@ -426,25 +436,29 @@
,
{ "type": "Feature", "properties": { "name": "Eddy St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.420611, 37.782892 ] } }
,
{ "type": "Feature", "properties": { "name": "Mason St & Geary Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.409968, 37.787233 ] } }
{ "type": "Feature", "properties": { "name": "O'Farrell St & Jones St" }, "geometry": { "type": "Point", "coordinates": [ -122.412543, 37.785809 ] } }
,
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Oak St" }, "geometry": { "type": "Point", "coordinates": [ -122.419496, 37.775532 ] } }
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Grove St" }, "geometry": { "type": "Point", "coordinates": [ -122.419839, 37.778720 ] } }
,
{ "type": "Feature", "properties": { "name": "Hermann St & Fillmore St" }, "geometry": { "type": "Point", "coordinates": [ -122.429967, 37.770308 ] } }
{ "type": "Feature", "properties": { "name": "Mission St & 11th St" }, "geometry": { "type": "Point", "coordinates": [ -122.417135, 37.774243 ] } }
,
{ "type": "Feature", "properties": { "name": "16th St & Dolores St" }, "geometry": { "type": "Point", "coordinates": [ -122.426190, 37.764744 ] } }
{ "type": "Feature", "properties": { "name": "Folsom St & 11th St" }, "geometry": { "type": "Point", "coordinates": [ -122.413745, 37.772004 ] } }
,
{ "type": "Feature", "properties": { "name": "Valencia St & 16th St" }, "geometry": { "type": "Point", "coordinates": [ -122.421856, 37.765253 ] } }
{ "type": "Feature", "properties": { "name": "Church St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.428894, 37.767322 ] } }
,
{ "type": "Feature", "properties": { "name": "Church St & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.427692, 37.754803 ] } }
{ "type": "Feature", "properties": { "name": "Valencia St & 15th St" }, "geometry": { "type": "Point", "coordinates": [ -122.421985, 37.766813 ] } }
,
{ "type": "Feature", "properties": { "name": "Valencia St & 23rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.420912, 37.753412 ] } }
{ "type": "Feature", "properties": { "name": "Church St & 19th St" }, "geometry": { "type": "Point", "coordinates": [ -122.428293, 37.759791 ] } }
,
{ "type": "Feature", "properties": { "name": "16th St & Shotwell St" }, "geometry": { "type": "Point", "coordinates": [ -122.416062, 37.765219 ] } }
{ "type": "Feature", "properties": { "name": "18th St & Valencia St" }, "geometry": { "type": "Point", "coordinates": [ -122.421770, 37.761792 ] } }
,
{ "type": "Feature", "properties": { "name": "16th St & Harrison St" }, "geometry": { "type": "Point", "coordinates": [ -122.413015, 37.765524 ] } }
{ "type": "Feature", "properties": { "name": "Folsom St & 14th St" }, "geometry": { "type": "Point", "coordinates": [ -122.415676, 37.768476 ] } }
,
{ "type": "Feature", "properties": { "name": "Mission St & 21st St" }, "geometry": { "type": "Point", "coordinates": [ -122.418981, 37.756601 ] } }
{ "type": "Feature", "properties": { "name": "Bryant St & Division St" }, "geometry": { "type": "Point", "coordinates": [ -122.410913, 37.769120 ] } }
,
{ "type": "Feature", "properties": { "name": "Mission St & 19th St" }, "geometry": { "type": "Point", "coordinates": [ -122.419195, 37.760673 ] } }
,
{ "type": "Feature", "properties": { "name": "South Van Ness & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.416706, 37.755753 ] } }
,
{ "type": "Feature", "properties": { "name": "Folsom St & 22nd St" }, "geometry": { "type": "Point", "coordinates": [ -122.414346, 37.755957 ] } }
,
@ -550,11 +564,11 @@
,
{ "type": "Feature", "properties": { "name": "Topeka Ave & Venus St" }, "geometry": { "type": "Point", "coordinates": [ -122.395935, 37.732032 ] } }
,
{ "type": "Feature", "properties": { "name": "Third Street/Revere/Shafter" }, "geometry": { "type": "Point", "coordinates": [ -122.391558, 37.732304 ] } }
{ "type": "Feature", "properties": { "name": "3rd St & Oakdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.390742, 37.734815 ] } }
,
{ "type": "Feature", "properties": { "name": "3rd St & Carroll Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.394218, 37.725312 ] } }
{ "type": "Feature", "properties": { "name": "Van Dyke Ave & Keith St" }, "geometry": { "type": "Point", "coordinates": [ -122.390442, 37.728095 ] } }
,
{ "type": "Feature", "properties": { "name": "Van Dyke Ave & Jennings St" }, "geometry": { "type": "Point", "coordinates": [ -122.388554, 37.727043 ] } }
{ "type": "Feature", "properties": { "name": "Third Street & Le Conte Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.397480, 37.718828 ] } }
,
{ "type": "Feature", "properties": { "name": "Not a public stop" }, "geometry": { "type": "Point", "coordinates": [ -122.386923, 37.755414 ] } }
,
@ -595,8 +609,6 @@
,
{ "type": "FeatureCollection", "properties": { "layer": "subway", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "name": "Metro Castro Station/Outbound" }, "geometry": { "type": "Point", "coordinates": [ -122.435331, 37.762708 ] } }
,
{ "type": "Feature", "properties": { "name": "Metro Civic Center Station/Outbd" }, "geometry": { "type": "Point", "coordinates": [ -122.415032, 37.778686 ] } }
] }
] }
,
@ -1158,9 +1170,11 @@
,
{ "type": "Feature", "properties": { "name": "PARKRIDGE DR & CRESTLINE DR" }, "geometry": { "type": "Point", "coordinates": [ -122.446103, 37.752360 ] } }
,
{ "type": "Feature", "properties": { "name": "Burnett Ave & Crestline Dr" }, "geometry": { "type": "Point", "coordinates": [ -122.444944, 37.749136 ] } }
{ "type": "Feature", "properties": { "name": "925 Corbett Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.443421, 37.752089 ] } }
,
{ "type": "Feature", "properties": { "name": "Dawnview Way & Burnett Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.445116, 37.747932 ] } }
{ "type": "Feature", "properties": { "name": "Glenview Dr & Portola Dr" }, "geometry": { "type": "Point", "coordinates": [ -122.447777, 37.746676 ] } }
,
{ "type": "Feature", "properties": { "name": "Diamond Heights Blvd & Duncan St" }, "geometry": { "type": "Point", "coordinates": [ -122.443228, 37.746676 ] } }
,
{ "type": "Feature", "properties": { "name": "100 O'Shaughnessy Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.450695, 37.744487 ] } }
,
@ -1324,7 +1338,7 @@
,
{ "type": "Feature", "properties": { "name": "Buchanan St & Bay St" }, "geometry": { "type": "Point", "coordinates": [ -122.433357, 37.803443 ] } }
,
{ "type": "Feature", "properties": { "name": "Steiner St & Union St" }, "geometry": { "type": "Point", "coordinates": [ -122.437069, 37.796797 ] } }
{ "type": "Feature", "properties": { "name": "Chestnut St & Webster St" }, "geometry": { "type": "Point", "coordinates": [ -122.434709, 37.800951 ] } }
,
{ "type": "Feature", "properties": { "name": "Union St & Buchanan St" }, "geometry": { "type": "Point", "coordinates": [ -122.432606, 37.797526 ] } }
,
@ -1648,6 +1662,8 @@
,
{ "type": "Feature", "properties": { "name": "22nd St & Iowa St" }, "geometry": { "type": "Point", "coordinates": [ -122.391815, 37.757772 ] } }
,
{ "type": "Feature", "properties": { "name": "22nd St & Pennsylvania Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.393060, 37.757585 ] } }
,
{ "type": "Feature", "properties": { "name": "3rd St & 23rd St" }, "geometry": { "type": "Point", "coordinates": [ -122.387910, 37.755702 ] } }
,
{ "type": "Feature", "properties": { "name": "24th St & Church St" }, "geometry": { "type": "Point", "coordinates": [ -122.427564, 37.751647 ] } }
@ -1760,7 +1776,7 @@
,
{ "type": "Feature", "properties": { "name": "Palou Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.396729, 37.737225 ] } }
,
{ "type": "Feature", "properties": { "name": "Evans Ave & Quint St" }, "geometry": { "type": "Point", "coordinates": [ -122.390549, 37.744250 ] } }
{ "type": "Feature", "properties": { "name": "Phelps St & Oakdale Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.394111, 37.736852 ] } }
,
{ "type": "Feature", "properties": { "name": "Evans Ave & Phelps St" }, "geometry": { "type": "Point", "coordinates": [ -122.388318, 37.742994 ] } }
,
@ -1958,7 +1974,7 @@
,
{ "type": "Feature", "properties": { "name": "Clay St & Drumm St" }, "geometry": { "type": "Point", "coordinates": [ -122.397008, 37.795424 ] } }
,
{ "type": "Feature", "properties": { "name": "The Embarcadero & Ferry Building" }, "geometry": { "type": "Point", "coordinates": [ -122.393789, 37.794830 ] } }
{ "type": "Feature", "properties": { "name": "THE EMBARCADERO/Ferry Building" }, "geometry": { "type": "Point", "coordinates": [ -122.393875, 37.795118 ] } }
,
{ "type": "Feature", "properties": { "name": "Mission St & 1st St" }, "geometry": { "type": "Point", "coordinates": [ -122.397501, 37.789930 ] } }
,
@ -2214,11 +2230,9 @@
,
{ "type": "Feature", "properties": { "name": "Rivera St & 37th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.495370, 37.745853 ] } }
,
{ "type": "Feature", "properties": { "name": "Sunset Blvd & Quintara St" }, "geometry": { "type": "Point", "coordinates": [ -122.494769, 37.748076 ] } }
{ "type": "Feature", "properties": { "name": "Quintara St & 36th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.494404, 37.747771 ] } }
,
{ "type": "Feature", "properties": { "name": "Quintara St & 35th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.493106, 37.747966 ] } }
,
{ "type": "Feature", "properties": { "name": "Sunset Blvd & Rivera St" }, "geometry": { "type": "Point", "coordinates": [ -122.494801, 37.746082 ] } }
{ "type": "Feature", "properties": { "name": "Quintara St & 35th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.493342, 37.747838 ] } }
,
{ "type": "Feature", "properties": { "name": "Quintara St & 33rd Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.490960, 37.748051 ] } }
,
@ -2538,7 +2552,7 @@
,
{ "type": "Feature", "properties": { "name": "Clement St & 25th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.485242, 37.782061 ] } }
,
{ "type": "Feature", "properties": { "name": "25th Ave & Clement St" }, "geometry": { "type": "Point", "coordinates": [ -122.484716, 37.781959 ] } }
{ "type": "Feature", "properties": { "name": "Clement St & 25th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.484502, 37.781976 ] } }
,
{ "type": "Feature", "properties": { "name": "25th Ave & Geary Blvd" }, "geometry": { "type": "Point", "coordinates": [ -122.484845, 37.780255 ] } }
,
@ -2560,8 +2574,6 @@
,
{ "type": "Feature", "properties": { "name": "Clement St & 18th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.477517, 37.782290 ] } }
,
{ "type": "Feature", "properties": { "name": "Clement St & 17th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.476712, 37.782451 ] } }
,
{ "type": "Feature", "properties": { "name": "Geary Blvd & 17th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.476047, 37.780603 ] } }
,
{ "type": "Feature", "properties": { "name": "25th Ave & Anza St" }, "geometry": { "type": "Point", "coordinates": [ -122.484695, 37.778288 ] } }
@ -3004,7 +3016,7 @@
,
{ "type": "Feature", "properties": { "name": "Ulloa St & Lenox Way" }, "geometry": { "type": "Point", "coordinates": [ -122.466263, 37.741179 ] } }
,
{ "type": "Feature", "properties": { "name": "West Portal Station" }, "geometry": { "type": "Point", "coordinates": [ -122.465651, 37.740933 ] } }
{ "type": "Feature", "properties": { "name": "West Portal Station Inbound" }, "geometry": { "type": "Point", "coordinates": [ -122.465533, 37.741162 ] } }
,
{ "type": "Feature", "properties": { "name": "West Portal Ave & 14th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.469063, 37.738107 ] } }
,
@ -3344,7 +3356,7 @@
,
{ "type": "Feature", "properties": { "name": "Balboa Park BART/Mezzanine level" }, "geometry": { "type": "Point", "coordinates": [ -122.446661, 37.720907 ] } }
,
{ "type": "Feature", "properties": { "name": "San Jose Ave & Niagra Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.447197, 37.719982 ] } }
{ "type": "Feature", "properties": { "name": "Geneva Ave/Balboa Park BART" }, "geometry": { "type": "Point", "coordinates": [ -122.447144, 37.719863 ] } }
,
{ "type": "Feature", "properties": { "name": "Green Yard-San Jose & Ocean" }, "geometry": { "type": "Point", "coordinates": [ -122.445052, 37.722749 ] } }
,
@ -3664,8 +3676,6 @@
,
{ "type": "Feature", "properties": { "name": "Frederick St & Willard St" }, "geometry": { "type": "Point", "coordinates": [ -122.454911, 37.766211 ] } }
,
{ "type": "Feature", "properties": { "name": "Parnassus Ave & Willard St" }, "geometry": { "type": "Point", "coordinates": [ -122.454311, 37.764244 ] } }
,
{ "type": "Feature", "properties": { "name": "Lawton St & 7th Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.464095, 37.758612 ] } }
,
{ "type": "Feature", "properties": { "name": "Warren Dr & Locksley Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.463140, 37.758696 ] } }
@ -5046,8 +5056,6 @@
,
{ "type": "Feature", "properties": { "name": "Hayes St & Larkin St" }, "geometry": { "type": "Point", "coordinates": [ -122.416856, 37.777711 ] } }
,
{ "type": "Feature", "properties": { "name": "9TH St AND MARKET St" }, "geometry": { "type": "Point", "coordinates": [ -122.416309, 37.777380 ] } }
,
{ "type": "Feature", "properties": { "name": "Mission St & 9th St" }, "geometry": { "type": "Point", "coordinates": [ -122.415183, 37.775947 ] } }
,
{ "type": "Feature", "properties": { "name": "MARKET ST & VAN NESS AVE" }, "geometry": { "type": "Point", "coordinates": [ -122.419260, 37.775031 ] } }
@ -5456,7 +5464,7 @@
,
{ "type": "Feature", "properties": { "name": "23rd St & Wisconsin St" }, "geometry": { "type": "Point", "coordinates": [ -122.398564, 37.754812 ] } }
,
{ "type": "Feature", "properties": { "name": "1095 CONNECTICUT ST" }, "geometry": { "type": "Point", "coordinates": [ -122.397351, 37.753904 ] } }
{ "type": "Feature", "properties": { "name": "23rd St & Dakota St" }, "geometry": { "type": "Point", "coordinates": [ -122.396783, 37.754684 ] } }
,
{ "type": "Feature", "properties": { "name": "Missouri St & Turner Ter" }, "geometry": { "type": "Point", "coordinates": [ -122.395753, 37.757271 ] } }
,
@ -5588,9 +5596,9 @@
,
{ "type": "Feature", "properties": { "name": "Polk St & Broadway" }, "geometry": { "type": "Point", "coordinates": [ -122.421738, 37.796187 ] } }
,
{ "type": "Feature", "properties": { "name": "Pacific Ave & Polk St" }, "geometry": { "type": "Point", "coordinates": [ -122.421255, 37.795000 ] } }
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Jackson St" }, "geometry": { "type": "Point", "coordinates": [ -122.423015, 37.794177 ] } }
,
{ "type": "Feature", "properties": { "name": "Washington St & Van Ness Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.422435, 37.793084 ] } }
{ "type": "Feature", "properties": { "name": "Van Ness Ave & Clay St" }, "geometry": { "type": "Point", "coordinates": [ -122.422607, 37.792456 ] } }
,
{ "type": "Feature", "properties": { "name": "Polk St & Washington St" }, "geometry": { "type": "Point", "coordinates": [ -122.421201, 37.793499 ] } }
,
@ -5768,13 +5776,13 @@
,
{ "type": "Feature", "properties": { "name": "Clay St & Kearny St" }, "geometry": { "type": "Point", "coordinates": [ -122.404422, 37.794483 ] } }
,
{ "type": "Feature", "properties": { "name": "California St & Powell St" }, "geometry": { "type": "Point", "coordinates": [ -122.409346, 37.791956 ] } }
{ "type": "Feature", "properties": { "name": "Powell St & California St" }, "geometry": { "type": "Point", "coordinates": [ -122.409303, 37.792219 ] } }
,
{ "type": "Feature", "properties": { "name": "California St & Stockton St" }, "geometry": { "type": "Point", "coordinates": [ -122.407554, 37.792312 ] } }
,
{ "type": "Feature", "properties": { "name": "Powell St & Bush St" }, "geometry": { "type": "Point", "coordinates": [ -122.408874, 37.790142 ] } }
,
{ "type": "Feature", "properties": { "name": "Powell St & Post St" }, "geometry": { "type": "Point", "coordinates": [ -122.408305, 37.788200 ] } }
{ "type": "Feature", "properties": { "name": "Stockton St & Sutter St" }, "geometry": { "type": "Point", "coordinates": [ -122.407147, 37.789955 ] } }
,
{ "type": "Feature", "properties": { "name": "California St & Grant Ave" }, "geometry": { "type": "Point", "coordinates": [ -122.405945, 37.792380 ] } }
,
@ -5828,7 +5836,7 @@
,
{ "type": "Feature", "properties": { "name": "Main St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.395678, 37.792533 ] } }
,
{ "type": "Feature", "properties": { "name": "Steuart St & Mission St" }, "geometry": { "type": "Point", "coordinates": [ -122.393703, 37.793711 ] } }
{ "type": "Feature", "properties": { "name": "Don Chee Way/Steuart St" }, "geometry": { "type": "Point", "coordinates": [ -122.393457, 37.793906 ] } }
,
{ "type": "Feature", "properties": { "name": "Fremont St & Market St" }, "geometry": { "type": "Point", "coordinates": [ -122.398156, 37.791651 ] } }
,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -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": [

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -8,7 +8,7 @@
"maxzoom": "5",
"minzoom": "0",
"name": "tests/ne_110m_admin_1_states_provinces_lines/out/-z5_-M500_--drop-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_as_needed\": 92, \"tile_size_desired\": 1372 }, { \"dropped_as_needed\": 97, \"tile_size_desired\": 1731 }, { \"dropped_as_needed\": 115, \"tile_size_desired\": 1306 }, { \"dropped_as_needed\": 113, \"tile_size_desired\": 1160 }, { \"dropped_as_needed\": 106, \"tile_size_desired\": 1229 }, { \"dropped_as_needed\": 102, \"tile_size_desired\": 1079 } ]",
"strategies": "[ { \"dropped_as_needed\": 94, \"tile_size_desired\": 1372 }, { \"dropped_as_needed\": 97, \"tile_size_desired\": 1731 }, { \"dropped_as_needed\": 115, \"tile_size_desired\": 1306 }, { \"dropped_as_needed\": 113, \"tile_size_desired\": 1160 }, { \"dropped_as_needed\": 106, \"tile_size_desired\": 1231 }, { \"dropped_as_needed\": 102, \"tile_size_desired\": 1080 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@ -26,8 +26,6 @@
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -96.503906, 42.553080 ], [ -97.294922, 42.875964 ], [ -97.998047, 42.811522 ], [ -98.613281, 43.004647 ], [ -104.062500, 43.004647 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -91.230469, 43.516689 ], [ -91.318359, 43.961191 ], [ -92.812500, 44.777936 ], [ -92.724609, 45.521744 ], [ -92.900391, 45.706179 ], [ -92.812500, 45.890008 ], [ -92.285156, 46.134170 ], [ -92.285156, 46.679594 ], [ -92.021484, 46.739861 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -120.058594, 42.032974 ], [ -120.058594, 39.027719 ], [ -114.697266, 35.101934 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -114.082031, 37.020098 ], [ -114.082031, 42.032974 ] ] } }
@ -44,8 +42,6 @@
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -94.482422, 33.651208 ], [ -95.273438, 33.943360 ], [ -96.328125, 33.797409 ], [ -96.855469, 33.797409 ], [ -97.031250, 33.943360 ], [ -97.119141, 33.797409 ], [ -97.734375, 34.016242 ], [ -97.998047, 33.943360 ], [ -98.173828, 34.161818 ], [ -99.228516, 34.307144 ], [ -99.404297, 34.452218 ], [ -99.667969, 34.379713 ], [ -100.019531, 34.597042 ], [ -100.019531, 36.527295 ], [ -103.007812, 36.527295 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -74.707031, 41.376809 ], [ -75.058594, 41.508577 ], [ -75.058594, 41.771312 ], [ -75.410156, 42.032974 ], [ -79.804688, 42.032974 ], [ -79.804688, 42.293564 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -83.759766, 36.668419 ], [ -88.154297, 36.668419 ], [ -88.154297, 36.527295 ], [ -89.560547, 36.527295 ] ] } }
,
{ "type": "Feature", "properties": { "scalerank": 2, "featurecla": "Admin-1 boundary", "adm0_a3": "USA", "adm0_name": "United States of America", "mapcolor9": 1, "mapcolor13": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ -77.783203, 39.368279 ], [ -77.871094, 39.164141 ], [ -78.398438, 39.436193 ], [ -78.486328, 39.164141 ], [ -79.013672, 38.822591 ], [ -79.277344, 38.479395 ], [ -79.453125, 38.479395 ], [ -79.716797, 38.616870 ], [ -80.332031, 37.788081 ], [ -80.332031, 37.579413 ], [ -80.507812, 37.509726 ], [ -81.738281, 37.230328 ], [ -82.001953, 37.370157 ], [ -82.001953, 37.579413 ] ] } }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -8,7 +8,7 @@
"maxzoom": "1",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 145, \"coalesced_as_needed\": 78, \"tile_size_desired\": 34120 }, { \"coalesced_as_needed\": 229, \"tile_size_desired\": 46042 } ]",
"strategies": "[ { \"dropped_by_rate\": 145, \"coalesced_as_needed\": 78, \"tile_size_desired\": 32931 }, { \"coalesced_as_needed\": 229, \"tile_size_desired\": 44391 } ]",
"type": "overlay",
"version": "2"
}, "features": [

@ -8,7 +8,7 @@
"maxzoom": "1",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json.check.mbtiles",
"strategies": "[ { \"dropped_by_rate\": 145, \"dropped_as_needed\": 72, \"tile_size_desired\": 34120 }, { \"dropped_as_needed\": 206, \"tile_size_desired\": 46042 } ]",
"strategies": "[ { \"dropped_by_rate\": 145, \"dropped_as_needed\": 71, \"tile_size_desired\": 32931 }, { \"dropped_as_needed\": 204, \"tile_size_desired\": 44391 } ]",
"type": "overlay",
"version": "2"
}, "features": [
@ -42,6 +42,8 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Juba", "DIFFASCII": 0, "NAMEASCII": "Juba", "ADM0CAP": 0, "CAPALT": 1, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "South Sudan", "SOV_A3": "SSD", "ADM0NAME": "South Sudan", "ADM0_A3": "SSD", "ADM1NAME": "Central Equatoria", "ISO_A2": "SS", "LATITUDE": 4.829975, "LONGITUDE": 31.580026, "CHANGED": 20, "NAMEDIFF": 0, "DIFFNOTE": "Changed country.", "POP_MAX": 111975, "POP_MIN": 111975, "POP_OTHER": 111975, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 373303, "LS_NAME": "Juba", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 111975, "MAX_POP20": 111975, "MAX_POP50": 111975, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 50, "MIN_AREAKM": 21, "MAX_AREAKM": 21, "MIN_AREAMI": 8, "MAX_AREAMI": 8, "MIN_PERKM": 30, "MAX_PERKM": 30, "MIN_PERMI": 18, "MAX_PERMI": 18, "MIN_BBXMIN": 31.575, "MAX_BBXMIN": 31.575, "MIN_BBXMAX": 31.625, "MAX_BBXMAX": 31.625, "MIN_BBYMIN": 4.816667, "MAX_BBYMIN": 4.816667, "MIN_BBYMAX": 4.883333, "MAX_BBYMAX": 4.883333, "MEAN_BBXC": 31.6015, "MEAN_BBYC": 4.845167, "COMPARE": 0, "GN_ASCII": "Juba", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 44, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 551, "TIMEZONE": "Africa/Khartoum", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.552734, 4.915833 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Tashkent", "DIFFASCII": 0, "NAMEASCII": "Tashkent", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Uzbekistan", "SOV_A3": "UZB", "ADM0NAME": "Uzbekistan", "ADM0_A3": "UZB", "ADM1NAME": "Tashkent", "ISO_A2": "UZ", "LATITUDE": 41.311702, "LONGITUDE": 69.294933, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2184000, "POP_MIN": 1978028, "POP_OTHER": 2806287, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1512569, "MEGANAME": "Tashkent", "LS_NAME": "Tashkent", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2865234, "MAX_POP20": 2865890, "MAX_POP50": 2865890, "MAX_POP300": 2865890, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 639, "MAX_AREAKM": 643, "MIN_AREAMI": 247, "MAX_AREAMI": 248, "MIN_PERKM": 377, "MAX_PERKM": 383, "MIN_PERMI": 234, "MAX_PERMI": 238, "MIN_BBXMIN": 69.05, "MAX_BBXMIN": 69.05, "MIN_BBXMAX": 69.436467, "MAX_BBXMAX": 69.45, "MIN_BBYMIN": 41.141667, "MAX_BBYMIN": 41.141667, "MIN_BBYMAX": 41.483333, "MAX_BBYMAX": 41.483333, "MEAN_BBXC": 69.256717, "MEAN_BBYC": 41.318916, "COMPARE": 0, "GN_ASCII": "Tashkent", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 13, "GN_POP": 1978028, "ELEVATION": 0, "GTOPO30": 460, "TIMEZONE": "Asia/Tashkent", "GEONAMESNO": "GeoNames match general.", "UN_FID": 580, "UN_ADM0": "Uzbekistan", "UN_LAT": 41.24, "UN_LONG": 69.34, "POP1950": 755, "POP1955": 843, "POP1960": 964, "POP1965": 1165, "POP1970": 1403, "POP1975": 1612, "POP1980": 1818, "POP1985": 1958, "POP1990": 2100, "POP1995": 2116, "POP2000": 2135, "POP2005": 2158, "POP2010": 2184, "POP2015": 2247, "POP2020": 2416, "POP2025": 2636, "POP2050": 2892 }, "geometry": { "type": "Point", "coordinates": [ 69.257812, 41.376809 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Urumqi", "NAMEALT": "Ürümqi|Wulumqi", "DIFFASCII": 0, "NAMEASCII": "Urumqi", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "China", "SOV_A3": "CHN", "ADM0NAME": "China", "ADM0_A3": "CHN", "ADM1NAME": "Xinjiang Uygur", "ISO_A2": "CN", "LATITUDE": 43.805012, "LONGITUDE": 87.575006, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2151000, "POP_MIN": 1508225, "POP_OTHER": 2044401, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1529102, "MEGANAME": "Ürümqi (Wulumqi)", "LS_NAME": "Urumqi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2066046, "MAX_POP20": 2066046, "MAX_POP50": 2066046, "MAX_POP300": 2066046, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 361, "MAX_AREAKM": 361, "MIN_AREAMI": 139, "MAX_AREAMI": 139, "MIN_PERKM": 318, "MAX_PERKM": 318, "MIN_PERMI": 198, "MAX_PERMI": 198, "MIN_BBXMIN": 87.358333, "MAX_BBXMIN": 87.358333, "MIN_BBXMAX": 87.725, "MAX_BBXMAX": 87.725, "MIN_BBYMIN": 43.641667, "MAX_BBYMIN": 43.641667, "MIN_BBYMAX": 44.016667, "MAX_BBYMAX": 44.016667, "MEAN_BBXC": 87.578494, "MEAN_BBYC": 43.854525, "COMPARE": 0, "GN_ASCII": "Urumqi", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 13, "GN_POP": 1508225, "ELEVATION": 0, "GTOPO30": 915, "TIMEZONE": "Asia/Urumqi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 118, "UN_ADM0": "China", "UN_LAT": 43.78, "UN_LONG": 87.58, "POP1950": 253, "POP1955": 312, "POP1960": 384, "POP1965": 472, "POP1970": 581, "POP1975": 715, "POP1980": 881, "POP1985": 1029, "POP1990": 1161, "POP1995": 1417, "POP2000": 1730, "POP2005": 2025, "POP2010": 2151, "POP2015": 2340, "POP2020": 2620, "POP2025": 2851, "POP2050": 3038, "CITYALT": "Urumqi" }, "geometry": { "type": "Point", "coordinates": [ 87.539062, 43.834527 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Muscat", "DIFFASCII": 0, "NAMEASCII": "Muscat", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Oman", "SOV_A3": "OMN", "ADM0NAME": "Oman", "ADM0_A3": "OMN", "ADM1NAME": "Muscat", "ISO_A2": "OM", "LATITUDE": 23.613325, "LONGITUDE": 58.593312, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 734697, "POP_MIN": 586861, "POP_OTHER": 586861, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 287286, "LS_NAME": "Muscat", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 586861, "MAX_POP20": 586861, "MAX_POP50": 586861, "MAX_POP300": 586861, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 104, "MAX_AREAKM": 104, "MIN_AREAMI": 40, "MAX_AREAMI": 40, "MIN_PERKM": 121, "MAX_PERKM": 121, "MIN_PERMI": 75, "MAX_PERMI": 75, "MIN_BBXMIN": 58.333333, "MAX_BBXMIN": 58.333333, "MIN_BBXMAX": 58.6, "MAX_BBXMAX": 58.6, "MIN_BBYMIN": 23.558333, "MAX_BBYMIN": 23.558333, "MIN_BBYMAX": 23.641667, "MAX_BBYMAX": 23.641667, "MEAN_BBXC": 58.474684, "MEAN_BBYC": 23.599306, "COMPARE": 0, "GN_ASCII": "Muscat", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 6, "GN_POP": 797000, "ELEVATION": 0, "GTOPO30": 69, "TIMEZONE": "Asia/Muscat", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 58.535156, 23.644524 ] } }
@ -102,6 +104,8 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Atlanta", "DIFFASCII": 0, "NAMEASCII": "Atlanta", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United States", "SOV_A3": "USA", "ADM0NAME": "United States of America", "ADM0_A3": "USA", "ADM1NAME": "Georgia", "ISO_A2": "US", "LATITUDE": 33.830014, "LONGITUDE": -84.399949, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 4506000, "POP_MIN": 422908, "POP_OTHER": 2874096, "RANK_MAX": 12, "RANK_MIN": 10, "GEONAMEID": 4180439, "MEGANAME": "Atlanta", "LS_NAME": "Atlanta", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2928128, "MAX_POP20": 3896411, "MAX_POP50": 3910939, "MAX_POP300": 3910939, "MAX_POP310": 3910939, "MAX_NATSCA": 300, "MIN_AREAKM": 2761, "MAX_AREAKM": 4086, "MIN_AREAMI": 1066, "MAX_AREAMI": 1578, "MIN_PERKM": 1494, "MAX_PERKM": 2459, "MIN_PERMI": 929, "MAX_PERMI": 1528, "MIN_BBXMIN": -84.875, "MAX_BBXMIN": -84.608333, "MIN_BBXMAX": -83.879976, "MAX_BBXMAX": -83.858333, "MIN_BBYMIN": 33.383333, "MAX_BBYMIN": 33.383333, "MIN_BBYMAX": 34.202715, "MAX_BBYMAX": 34.275, "MEAN_BBXC": -84.328739, "MEAN_BBYC": 33.851552, "COMPARE": 0, "GN_ASCII": "Atlanta", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 0, "GN_POP": 422908, "ELEVATION": 320, "GTOPO30": 305, "TIMEZONE": "America/New_York", "GEONAMESNO": "GeoNames match general.", "UN_FID": 524, "UN_ADM0": "United States of America", "UN_LAT": 33.79, "UN_LONG": -84.34, "POP1950": 513, "POP1955": 631, "POP1960": 776, "POP1965": 959, "POP1970": 1182, "POP1975": 1386, "POP1980": 1625, "POP1985": 1879, "POP1990": 2184, "POP1995": 2781, "POP2000": 3542, "POP2005": 4307, "POP2010": 4506, "POP2015": 4695, "POP2020": 4888, "POP2025": 5035, "POP2050": 5151 }, "geometry": { "type": "Point", "coordinates": [ -84.418945, 33.833920 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Havana", "NAMEALT": "La Habana", "DIFFASCII": 0, "NAMEASCII": "Havana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Cuba", "SOV_A3": "CUB", "ADM0NAME": "Cuba", "ADM0_A3": "CUB", "ADM1NAME": "Ciudad de la Habana", "ISO_A2": "CU", "LATITUDE": 23.131959, "LONGITUDE": -82.364182, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2174000, "POP_MIN": 1990917, "POP_OTHER": 1930305, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3553478, "MEGANAME": "La Habana", "LS_NAME": "Havana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1990917, "MAX_POP20": 2051170, "MAX_POP50": 2051170, "MAX_POP300": 2051170, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 323, "MAX_AREAKM": 362, "MIN_AREAMI": 125, "MAX_AREAMI": 140, "MIN_PERKM": 240, "MAX_PERKM": 286, "MIN_PERMI": 149, "MAX_PERMI": 177, "MIN_BBXMIN": -82.533333, "MAX_BBXMIN": -82.533333, "MIN_BBXMAX": -82.208333, "MAX_BBXMAX": -82.208333, "MIN_BBYMIN": 22.916667, "MAX_BBYMIN": 22.975161, "MIN_BBYMAX": 23.183333, "MAX_BBYMAX": 23.183333, "MEAN_BBXC": -82.354344, "MEAN_BBYC": 23.076845, "COMPARE": 0, "GN_ASCII": "Havana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 2163824, "ELEVATION": 0, "GTOPO30": 5, "TIMEZONE": "America/Havana", "GEONAMESNO": "GeoNames match general.", "UN_FID": 172, "UN_ADM0": "Cuba", "UN_LAT": 23.04, "UN_LONG": -82.41, "POP1950": 1116, "POP1955": 1289, "POP1960": 1436, "POP1965": 1598, "POP1970": 1779, "POP1975": 1848, "POP1980": 1913, "POP1985": 2005, "POP1990": 2108, "POP1995": 2183, "POP2000": 2187, "POP2005": 2189, "POP2010": 2174, "POP2015": 2159, "POP2020": 2151, "POP2025": 2150, "POP2050": 2150, "CITYALT": "Havana" }, "geometry": { "type": "Point", "coordinates": [ -82.397461, 23.160563 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Basseterre", "DIFFASCII": 0, "NAMEASCII": "Basseterre", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Saint Kitts and Nevis", "SOV_A3": "KNA", "ADM0NAME": "Saint Kitts and Nevis", "ADM0_A3": "KNA", "ISO_A2": "KN", "LATITUDE": 17.30203, "LONGITUDE": -62.717009, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 21887, "POP_MIN": 15500, "POP_OTHER": 21887, "RANK_MAX": 7, "RANK_MIN": 6, "GEONAMEID": 3575551, "LS_NAME": "Basseterre", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 21887, "MAX_POP20": 21887, "MAX_POP50": 21887, "MAX_POP300": 21887, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 7, "MAX_AREAKM": 7, "MIN_AREAMI": 3, "MAX_AREAMI": 3, "MIN_PERKM": 16, "MAX_PERKM": 16, "MIN_PERMI": 10, "MAX_PERMI": 10, "MIN_BBXMIN": -62.741667, "MAX_BBXMIN": -62.741667, "MIN_BBXMAX": -62.708333, "MAX_BBXMAX": -62.708333, "MIN_BBYMIN": 17.291667, "MAX_BBYMIN": 17.291667, "MIN_BBYMAX": 17.333333, "MAX_BBYMAX": 17.333333, "MEAN_BBXC": -62.726389, "MEAN_BBYC": 17.306019, "COMPARE": 0, "GN_ASCII": "Basseterre", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 3, "GN_POP": 12920, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "America/St_Kitts", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -62.753906, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Reykjavík", "DIFFASCII": 1, "NAMEASCII": "Reykjavik", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Iceland", "SOV_A3": "ISL", "ADM0NAME": "Iceland", "ADM0_A3": "ISL", "ADM1NAME": "Suðurnes", "ISO_A2": "IS", "LATITUDE": 64.150024, "LONGITUDE": -21.950014, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 166212, "POP_MIN": 113906, "POP_OTHER": 160116, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 3413829, "LS_NAME": "Reykjavik", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 166212, "MAX_POP20": 166212, "MAX_POP50": 166212, "MAX_POP300": 166212, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 75, "MAX_AREAKM": 75, "MIN_AREAMI": 29, "MAX_AREAMI": 29, "MIN_PERKM": 119, "MAX_PERKM": 119, "MIN_PERMI": 74, "MAX_PERMI": 74, "MIN_BBXMIN": -22.008333, "MAX_BBXMIN": -22.008333, "MIN_BBXMAX": -21.75, "MAX_BBXMAX": -21.75, "MIN_BBYMIN": 64.05, "MAX_BBYMIN": 64.05, "MIN_BBYMAX": 64.166667, "MAX_BBYMAX": 64.166667, "MEAN_BBXC": -21.8825, "MEAN_BBYC": 64.116125, "COMPARE": 0, "GN_ASCII": "Reykjavik", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 39, "GN_POP": 113906, "ELEVATION": 0, "GTOPO30": 16, "TIMEZONE": "Atlantic/Reykjavik", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -21.972656, 64.168107 ] } }
@ -205,6 +209,8 @@
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Majuro", "DIFFASCII": 0, "NAMEASCII": "Majuro", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Marshall Islands", "SOV_A3": "MHL", "ADM0NAME": "Marshall Islands", "ADM0_A3": "MHL", "ISO_A2": "MH", "LATITUDE": 7.103004, "LONGITUDE": 171.38, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 25400, "POP_MIN": 20500, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2113779, "LS_NAME": "Majuro", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2084, "MAX_POP20": 2084, "MAX_POP50": 2084, "MAX_POP300": 2084, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 171.366667, "MAX_BBXMIN": 171.366667, "MIN_BBXMAX": 171.375, "MAX_BBXMAX": 171.375, "MIN_BBYMIN": 7.091667, "MAX_BBYMIN": 7.091667, "MIN_BBYMAX": 7.116667, "MAX_BBYMAX": 7.116667, "MEAN_BBXC": 171.370833, "MEAN_BBYC": 7.104167, "COMPARE": 0, "GN_ASCII": "Majuro", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 20500, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Majuro", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.342773, 7.144499 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Kigali", "DIFFASCII": 0, "NAMEASCII": "Kigali", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Rwanda", "SOV_A3": "RWA", "ADM0NAME": "Rwanda", "ADM0_A3": "RWA", "ADM1NAME": "Kigali City", "ISO_A2": "RW", "LATITUDE": -1.95359, "LONGITUDE": 30.060532, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 860000, "POP_MIN": 745261, "POP_OTHER": 1152904, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 202061, "MEGANAME": "Kigali", "LS_NAME": "Kigali", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1046787, "MAX_POP20": 2263899, "MAX_POP50": 5065653, "MAX_POP300": 7102391, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 601, "MAX_AREAKM": 8753, "MIN_AREAMI": 232, "MAX_AREAMI": 3380, "MIN_PERKM": 735, "MAX_PERKM": 9184, "MIN_PERMI": 457, "MAX_PERMI": 5707, "MIN_BBXMIN": 29.166667, "MAX_BBXMIN": 29.833333, "MIN_BBXMAX": 30.233333, "MAX_BBXMAX": 30.475, "MIN_BBYMIN": -2.991667, "MAX_BBYMIN": -2.075, "MIN_BBYMAX": -1.76663, "MAX_BBYMAX": -1.075, "MEAN_BBXC": 29.913775, "MEAN_BBYC": -2.034427, "COMPARE": 0, "GN_ASCII": "Kigali", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 745261, "ELEVATION": 0, "GTOPO30": 1568, "TIMEZONE": "Africa/Kigali", "GEONAMESNO": "GeoNames match general.", "UN_FID": 439, "UN_ADM0": "Rwanda", "UN_LAT": -1.95, "UN_LONG": 30.05, "POP1950": 18, "POP1955": 25, "POP1960": 34, "POP1965": 45, "POP1970": 59, "POP1975": 90, "POP1980": 128, "POP1985": 168, "POP1990": 219, "POP1995": 289, "POP2000": 497, "POP2005": 775, "POP2010": 860, "POP2015": 947, "POP2020": 1152, "POP2025": 1413, "POP2050": 1715 }, "geometry": { "type": "Point", "coordinates": [ 30.014648, -1.933227 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Nairobi", "DIFFASCII": 0, "NAMEASCII": "Nairobi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Kenya", "SOV_A3": "KEN", "ADM0NAME": "Kenya", "ADM0_A3": "KEN", "ADM1NAME": "Nairobi", "ISO_A2": "KE", "LATITUDE": -1.283347, "LONGITUDE": 36.816657, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3010000, "POP_MIN": 2750547, "POP_OTHER": 3400962, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 184745, "MEGANAME": "Nairobi", "LS_NAME": "Nairobi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 3401842, "MAX_POP20": 3401842, "MAX_POP50": 3418532, "MAX_POP300": 3418532, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 698, "MAX_AREAKM": 719, "MIN_AREAMI": 269, "MAX_AREAMI": 277, "MIN_PERKM": 554, "MAX_PERKM": 571, "MIN_PERMI": 344, "MAX_PERMI": 355, "MIN_BBXMIN": 36.608333, "MAX_BBXMIN": 36.608333, "MIN_BBXMAX": 37.066667, "MAX_BBXMAX": 37.066667, "MIN_BBYMIN": -1.433333, "MAX_BBYMIN": -1.433333, "MIN_BBYMAX": -1.083333, "MAX_BBYMAX": -1.083333, "MEAN_BBXC": 36.804283, "MEAN_BBYC": -1.249679, "COMPARE": 0, "GN_ASCII": "Nairobi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 5, "GN_POP": 2750547, "ELEVATION": 0, "GTOPO30": 1724, "TIMEZONE": "Africa/Nairobi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 324, "UN_ADM0": "Kenya", "UN_LAT": -1.26, "UN_LONG": 36.8, "POP1950": 137, "POP1955": 201, "POP1960": 293, "POP1965": 404, "POP1970": 531, "POP1975": 677, "POP1980": 862, "POP1985": 1090, "POP1990": 1380, "POP1995": 1755, "POP2000": 2233, "POP2005": 2787, "POP2010": 3010, "POP2015": 3363, "POP2020": 4052, "POP2025": 4881, "POP2050": 5871 }, "geometry": { "type": "Point", "coordinates": [ 36.782227, -1.274309 ] } }
] }
] }
] }

@ -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": [

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -19,7 +19,7 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 9, "x": 422, "y": 302 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "data", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.435608, -31.102628 ], [ 117.421875, -31.102628 ], [ 117.378616, -31.102775 ], [ 117.376556, -31.103803 ], [ 117.362309, -31.103803 ], [ 117.359734, -31.102922 ], [ 117.346516, -31.102922 ], [ 117.346344, -31.112475 ], [ 117.327976, -31.112475 ], [ 117.327976, -31.142452 ], [ 117.324543, -31.142452 ], [ 117.324543, -31.152589 ], [ 117.326088, -31.152589 ], [ 117.326088, -31.162431 ], [ 117.323856, -31.162137 ], [ 117.294674, -31.165663 ], [ 117.294502, -31.252433 ], [ 117.301025, -31.252433 ], [ 117.301025, -31.269014 ], [ 117.299995, -31.270628 ], [ 117.298794, -31.271802 ], [ 117.297935, -31.273563 ], [ 117.297935, -31.276497 ], [ 117.278194, -31.276350 ], [ 117.274418, -31.275176 ], [ 117.253132, -31.275323 ], [ 117.253132, -31.282365 ], [ 117.253990, -31.282365 ], [ 117.254162, -31.287940 ], [ 117.262573, -31.287940 ], [ 117.262573, -31.295274 ], [ 117.260170, -31.295274 ], [ 117.260170, -31.303782 ], [ 117.258968, -31.303782 ], [ 117.258968, -31.311408 ], [ 117.264633, -31.311408 ], [ 117.264633, -31.327686 ], [ 117.280083, -31.327686 ], [ 117.280083, -31.353197 ], [ 117.274761, -31.353197 ], [ 117.274761, -31.365364 ], [ 117.224121, -31.365364 ], [ 117.224808, -31.361992 ], [ 117.224808, -31.357448 ], [ 117.223091, -31.355396 ], [ 117.222061, -31.353637 ], [ 117.218456, -31.346747 ], [ 117.215710, -31.337364 ], [ 117.215366, -31.335311 ], [ 117.212791, -31.330472 ], [ 117.210045, -31.321087 ], [ 117.209015, -31.309355 ], [ 117.207813, -31.307155 ], [ 117.205067, -31.297768 ], [ 117.204723, -31.294394 ], [ 117.204037, -31.292047 ], [ 117.203007, -31.282365 ], [ 117.203007, -31.275323 ], [ 117.204037, -31.265493 ], [ 117.206783, -31.256101 ], [ 117.211418, -31.247443 ], [ 117.217770, -31.239958 ], [ 117.225323, -31.233647 ], [ 117.233906, -31.229096 ], [ 117.243347, -31.226307 ], [ 117.244549, -31.226161 ], [ 117.244549, -31.165663 ], [ 117.245579, -31.156115 ], [ 117.248325, -31.146859 ], [ 117.252789, -31.138338 ], [ 117.258797, -31.130697 ], [ 117.266178, -31.124526 ], [ 117.274590, -31.119823 ], [ 117.278023, -31.118794 ], [ 117.278023, -31.112034 ], [ 117.279053, -31.102334 ], [ 117.281971, -31.093073 ], [ 117.286606, -31.084547 ], [ 117.292786, -31.076902 ], [ 117.300339, -31.070727 ], [ 117.308922, -31.066169 ], [ 117.315102, -31.064404 ], [ 117.317848, -31.062051 ], [ 117.326431, -31.057199 ], [ 117.336216, -31.054110 ], [ 117.346859, -31.052934 ], [ 117.359734, -31.052934 ], [ 117.369862, -31.053816 ], [ 117.378616, -31.052640 ], [ 117.435608, -31.052640 ], [ 117.435608, -31.102628 ] ] ], [ [ [ 117.435608, -31.195329 ], [ 117.435608, -31.209278 ], [ 117.426510, -31.209425 ], [ 117.426510, -31.200175 ], [ 117.428570, -31.200175 ], [ 117.428570, -31.195329 ], [ 117.435608, -31.195329 ] ] ], [ [ [ 117.435608, -31.102628 ], [ 117.435608, -31.183728 ], [ 117.435265, -31.183728 ], [ 117.435608, -31.102628 ] ] ] ] } }
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.435608, -31.102628 ], [ 117.421875, -31.102628 ], [ 117.378616, -31.102775 ], [ 117.376556, -31.103803 ], [ 117.362309, -31.103803 ], [ 117.359734, -31.102922 ], [ 117.346516, -31.102922 ], [ 117.346344, -31.112475 ], [ 117.327976, -31.112475 ], [ 117.327976, -31.142452 ], [ 117.324543, -31.142452 ], [ 117.324543, -31.152589 ], [ 117.326088, -31.152589 ], [ 117.326088, -31.162431 ], [ 117.323856, -31.162137 ], [ 117.294674, -31.165663 ], [ 117.294502, -31.252433 ], [ 117.301025, -31.252433 ], [ 117.301025, -31.269014 ], [ 117.299995, -31.270628 ], [ 117.298794, -31.271802 ], [ 117.297935, -31.273563 ], [ 117.297935, -31.276497 ], [ 117.278194, -31.276350 ], [ 117.274418, -31.275176 ], [ 117.253132, -31.275323 ], [ 117.253132, -31.282365 ], [ 117.253990, -31.282365 ], [ 117.254162, -31.287940 ], [ 117.262573, -31.287940 ], [ 117.262573, -31.295274 ], [ 117.260170, -31.295274 ], [ 117.260170, -31.303782 ], [ 117.258968, -31.303782 ], [ 117.258968, -31.311408 ], [ 117.264633, -31.311408 ], [ 117.264633, -31.327686 ], [ 117.280083, -31.327686 ], [ 117.280083, -31.353197 ], [ 117.274761, -31.353197 ], [ 117.274761, -31.365364 ], [ 117.224121, -31.365364 ], [ 117.224808, -31.361992 ], [ 117.224808, -31.357448 ], [ 117.223091, -31.355396 ], [ 117.222061, -31.353637 ], [ 117.218456, -31.346747 ], [ 117.215710, -31.337364 ], [ 117.215366, -31.335311 ], [ 117.212791, -31.330472 ], [ 117.210045, -31.321087 ], [ 117.209015, -31.309355 ], [ 117.207813, -31.307155 ], [ 117.205067, -31.297768 ], [ 117.204723, -31.294394 ], [ 117.204037, -31.292047 ], [ 117.203007, -31.282365 ], [ 117.203007, -31.275323 ], [ 117.204037, -31.265493 ], [ 117.206783, -31.256101 ], [ 117.211418, -31.247443 ], [ 117.217770, -31.239958 ], [ 117.225323, -31.233647 ], [ 117.233906, -31.229096 ], [ 117.243347, -31.226307 ], [ 117.244549, -31.226161 ], [ 117.244549, -31.165663 ], [ 117.245579, -31.156115 ], [ 117.248325, -31.146859 ], [ 117.252789, -31.138338 ], [ 117.258797, -31.130697 ], [ 117.266178, -31.124526 ], [ 117.274590, -31.119823 ], [ 117.278023, -31.118794 ], [ 117.278023, -31.112034 ], [ 117.279053, -31.102334 ], [ 117.281971, -31.093073 ], [ 117.286606, -31.084547 ], [ 117.292786, -31.076902 ], [ 117.300339, -31.070727 ], [ 117.308922, -31.066169 ], [ 117.315102, -31.064404 ], [ 117.317848, -31.062051 ], [ 117.326431, -31.057199 ], [ 117.335873, -31.054110 ], [ 117.346859, -31.052934 ], [ 117.359734, -31.052934 ], [ 117.369862, -31.053816 ], [ 117.378616, -31.052640 ], [ 117.435608, -31.052640 ], [ 117.435608, -31.102628 ] ] ], [ [ [ 117.435608, -31.195329 ], [ 117.435608, -31.209278 ], [ 117.426510, -31.209425 ], [ 117.426510, -31.200175 ], [ 117.428570, -31.200175 ], [ 117.428570, -31.195329 ], [ 117.435608, -31.195329 ] ] ], [ [ [ 117.435608, -31.102628 ], [ 117.435608, -31.183728 ], [ 117.435265, -31.183728 ], [ 117.435608, -31.102628 ] ] ] ] } }
] }
] }
,
@ -43,7 +43,7 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 10, "x": 845, "y": 605 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "data", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.428741, -31.102701 ], [ 117.421875, -31.102701 ], [ 117.378702, -31.102775 ], [ 117.376642, -31.103803 ], [ 117.362309, -31.103803 ], [ 117.359819, -31.102922 ], [ 117.346945, -31.102922 ], [ 117.346516, -31.102995 ], [ 117.346430, -31.103656 ], [ 117.346430, -31.112475 ], [ 117.328062, -31.112475 ], [ 117.327976, -31.142452 ], [ 117.324543, -31.142452 ], [ 117.324543, -31.152662 ], [ 117.326174, -31.152662 ], [ 117.326174, -31.162505 ], [ 117.323856, -31.162211 ], [ 117.295532, -31.165516 ], [ 117.294674, -31.165736 ], [ 117.294588, -31.252433 ], [ 117.301025, -31.252506 ], [ 117.301025, -31.269014 ], [ 117.300081, -31.270628 ], [ 117.298880, -31.271875 ], [ 117.297935, -31.273563 ], [ 117.297935, -31.276570 ], [ 117.278194, -31.276424 ], [ 117.274504, -31.275250 ], [ 117.253132, -31.275323 ], [ 117.253132, -31.282365 ], [ 117.254076, -31.282365 ], [ 117.254162, -31.288013 ], [ 117.262573, -31.288013 ], [ 117.262573, -31.295274 ], [ 117.260170, -31.295274 ], [ 117.260170, -31.303855 ], [ 117.259054, -31.303855 ], [ 117.259054, -31.311408 ], [ 117.264719, -31.311408 ], [ 117.264719, -31.327686 ], [ 117.280169, -31.327686 ], [ 117.280169, -31.353270 ], [ 117.274847, -31.353270 ], [ 117.274847, -31.359501 ], [ 117.224894, -31.359501 ], [ 117.224894, -31.357522 ], [ 117.223091, -31.355396 ], [ 117.222147, -31.353637 ], [ 117.218542, -31.346747 ], [ 117.215710, -31.337437 ], [ 117.215452, -31.335384 ], [ 117.212877, -31.330546 ], [ 117.210045, -31.321161 ], [ 117.209101, -31.311408 ], [ 117.209101, -31.309355 ], [ 117.207899, -31.307228 ], [ 117.205067, -31.297841 ], [ 117.204723, -31.294394 ], [ 117.204037, -31.292121 ], [ 117.203093, -31.282365 ], [ 117.203093, -31.275323 ], [ 117.204037, -31.265566 ], [ 117.206869, -31.256175 ], [ 117.211504, -31.247516 ], [ 117.217770, -31.239958 ], [ 117.225323, -31.233720 ], [ 117.233992, -31.229096 ], [ 117.243347, -31.226307 ], [ 117.244549, -31.226161 ], [ 117.244635, -31.165663 ], [ 117.245579, -31.156115 ], [ 117.248325, -31.146859 ], [ 117.252874, -31.138338 ], [ 117.258883, -31.130771 ], [ 117.266264, -31.124599 ], [ 117.274675, -31.119897 ], [ 117.278023, -31.118794 ], [ 117.278023, -31.112108 ], [ 117.279053, -31.102407 ], [ 117.281971, -31.093073 ], [ 117.286606, -31.084547 ], [ 117.292786, -31.076975 ], [ 117.300425, -31.070800 ], [ 117.309008, -31.066242 ], [ 117.315102, -31.064404 ], [ 117.317848, -31.062051 ], [ 117.326431, -31.057199 ], [ 117.336302, -31.054110 ], [ 117.346945, -31.052934 ], [ 117.359819, -31.052934 ], [ 117.369862, -31.053816 ], [ 117.377329, -31.052934 ], [ 117.378702, -31.052713 ], [ 117.428741, -31.052713 ], [ 117.428741, -31.102701 ] ] ], [ [ [ 117.428741, -31.102701 ], [ 117.428741, -31.209425 ], [ 117.426510, -31.209498 ], [ 117.426510, -31.200248 ], [ 117.428656, -31.200248 ], [ 117.428741, -31.102701 ] ] ] ] } }
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.428741, -31.102701 ], [ 117.421875, -31.102701 ], [ 117.378702, -31.102775 ], [ 117.376642, -31.103803 ], [ 117.362309, -31.103803 ], [ 117.359819, -31.102922 ], [ 117.346945, -31.102922 ], [ 117.346516, -31.102995 ], [ 117.346430, -31.103656 ], [ 117.346430, -31.112475 ], [ 117.328062, -31.112475 ], [ 117.327976, -31.142452 ], [ 117.324543, -31.142452 ], [ 117.324543, -31.152662 ], [ 117.326174, -31.152662 ], [ 117.326174, -31.162505 ], [ 117.323856, -31.162211 ], [ 117.295532, -31.165516 ], [ 117.294674, -31.165736 ], [ 117.294588, -31.252433 ], [ 117.301025, -31.252506 ], [ 117.301025, -31.269014 ], [ 117.300081, -31.270628 ], [ 117.298880, -31.271875 ], [ 117.297935, -31.273563 ], [ 117.297935, -31.276570 ], [ 117.278194, -31.276424 ], [ 117.274504, -31.275250 ], [ 117.253132, -31.275323 ], [ 117.253132, -31.282365 ], [ 117.254076, -31.282365 ], [ 117.254162, -31.288013 ], [ 117.262573, -31.288013 ], [ 117.262573, -31.295274 ], [ 117.260170, -31.295274 ], [ 117.260170, -31.303855 ], [ 117.259054, -31.303855 ], [ 117.259054, -31.311408 ], [ 117.264719, -31.311408 ], [ 117.264719, -31.327686 ], [ 117.280169, -31.327686 ], [ 117.280169, -31.353270 ], [ 117.274847, -31.353270 ], [ 117.274847, -31.359501 ], [ 117.224894, -31.359501 ], [ 117.224894, -31.357522 ], [ 117.223091, -31.355396 ], [ 117.222147, -31.353637 ], [ 117.218542, -31.346747 ], [ 117.215710, -31.337437 ], [ 117.215452, -31.335384 ], [ 117.212877, -31.330546 ], [ 117.210045, -31.321161 ], [ 117.209101, -31.311408 ], [ 117.209101, -31.309355 ], [ 117.207899, -31.307228 ], [ 117.205067, -31.297841 ], [ 117.204723, -31.294394 ], [ 117.204037, -31.292121 ], [ 117.203093, -31.282365 ], [ 117.203093, -31.275323 ], [ 117.204037, -31.265566 ], [ 117.206869, -31.256175 ], [ 117.211504, -31.247516 ], [ 117.217770, -31.239958 ], [ 117.225323, -31.233720 ], [ 117.233992, -31.229096 ], [ 117.243347, -31.226307 ], [ 117.244549, -31.226161 ], [ 117.244635, -31.165663 ], [ 117.245579, -31.156115 ], [ 117.248325, -31.146859 ], [ 117.252874, -31.138338 ], [ 117.258883, -31.130771 ], [ 117.266264, -31.124599 ], [ 117.274675, -31.119897 ], [ 117.278023, -31.118794 ], [ 117.278023, -31.112108 ], [ 117.279053, -31.102407 ], [ 117.281971, -31.093073 ], [ 117.286606, -31.084547 ], [ 117.292786, -31.076975 ], [ 117.300425, -31.070800 ], [ 117.309008, -31.066242 ], [ 117.315102, -31.064404 ], [ 117.317848, -31.062051 ], [ 117.326431, -31.057199 ], [ 117.335873, -31.054184 ], [ 117.346945, -31.052934 ], [ 117.359819, -31.052934 ], [ 117.369862, -31.053816 ], [ 117.377329, -31.052934 ], [ 117.378702, -31.052713 ], [ 117.428741, -31.052713 ], [ 117.428741, -31.102701 ] ] ], [ [ [ 117.428741, -31.102701 ], [ 117.428741, -31.209425 ], [ 117.426510, -31.209498 ], [ 117.426510, -31.200248 ], [ 117.428656, -31.200248 ], [ 117.428741, -31.102701 ] ] ] ] } }
] }
] }
,
@ -121,7 +121,7 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 11, "x": 1692, "y": 1211 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "data", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 117.498264, -31.203405 ], [ 117.498393, -31.204469 ], [ 117.498436, -31.265786 ], [ 117.497706, -31.273086 ], [ 117.497706, -31.299748 ], [ 117.496333, -31.311335 ], [ 117.495131, -31.314525 ], [ 117.495131, -31.325817 ], [ 117.494187, -31.335567 ], [ 117.491312, -31.344951 ], [ 117.486634, -31.353637 ], [ 117.485948, -31.354480 ], [ 117.485733, -31.356569 ], [ 117.435651, -31.356569 ], [ 117.435694, -31.354260 ], [ 117.435780, -31.353637 ], [ 117.436252, -31.351218 ], [ 117.436252, -31.340259 ], [ 117.436123, -31.340259 ], [ 117.436166, -31.325743 ], [ 117.445135, -31.325780 ], [ 117.445178, -31.304698 ], [ 117.447710, -31.299712 ], [ 117.447710, -31.266520 ], [ 117.448440, -31.265823 ], [ 117.448440, -31.245462 ], [ 117.448397, -31.204506 ], [ 117.447624, -31.204800 ], [ 117.446809, -31.205277 ], [ 117.446079, -31.205938 ], [ 117.445049, -31.207296 ], [ 117.444191, -31.208140 ], [ 117.443118, -31.208801 ], [ 117.441916, -31.209204 ], [ 117.440715, -31.209315 ], [ 117.426510, -31.209498 ], [ 117.426510, -31.200468 ], [ 117.497964, -31.200468 ], [ 117.498264, -31.203405 ] ] ] } }
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 117.498264, -31.203405 ], [ 117.498393, -31.204469 ], [ 117.498436, -31.265786 ], [ 117.497706, -31.273086 ], [ 117.497706, -31.299748 ], [ 117.496333, -31.311335 ], [ 117.495131, -31.314525 ], [ 117.495131, -31.325817 ], [ 117.494187, -31.335567 ], [ 117.491312, -31.344951 ], [ 117.486634, -31.353637 ], [ 117.485948, -31.354480 ], [ 117.485733, -31.356569 ], [ 117.435651, -31.356569 ], [ 117.435694, -31.354260 ], [ 117.435780, -31.353637 ], [ 117.436252, -31.351218 ], [ 117.436252, -31.340259 ], [ 117.436123, -31.340259 ], [ 117.436166, -31.325743 ], [ 117.445135, -31.325780 ], [ 117.445178, -31.304698 ], [ 117.447710, -31.299712 ], [ 117.447710, -31.266520 ], [ 117.448440, -31.265823 ], [ 117.448397, -31.204506 ], [ 117.447624, -31.204800 ], [ 117.446809, -31.205277 ], [ 117.446079, -31.205938 ], [ 117.445049, -31.207296 ], [ 117.444191, -31.208140 ], [ 117.443118, -31.208801 ], [ 117.441916, -31.209204 ], [ 117.440715, -31.209315 ], [ 117.426510, -31.209498 ], [ 117.426510, -31.200468 ], [ 117.497964, -31.200468 ], [ 117.498264, -31.203405 ] ] ] } }
] }
] }
,
@ -253,7 +253,7 @@
,
{ "type": "FeatureCollection", "properties": { "zoom": 12, "x": 3384, "y": 2422 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "data", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 117.498264, -31.203405 ], [ 117.498393, -31.204488 ], [ 117.498436, -31.265786 ], [ 117.497728, -31.273086 ], [ 117.497706, -31.278551 ], [ 117.497706, -31.280018 ], [ 117.447710, -31.280018 ], [ 117.447710, -31.278551 ], [ 117.447731, -31.266538 ], [ 117.448440, -31.265823 ], [ 117.448440, -31.245462 ], [ 117.448397, -31.204525 ], [ 117.447646, -31.204800 ], [ 117.446809, -31.205295 ], [ 117.446079, -31.205938 ], [ 117.445049, -31.207296 ], [ 117.444191, -31.208158 ], [ 117.443140, -31.208801 ], [ 117.441938, -31.209204 ], [ 117.440715, -31.209333 ], [ 117.426531, -31.209516 ], [ 117.426531, -31.201937 ], [ 117.498114, -31.201937 ], [ 117.498264, -31.203405 ] ] ] } }
{ "type": "Feature", "id": 109595776605697, "properties": { "country": "au", "text": "Wyalkatchem" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 117.498264, -31.203405 ], [ 117.498393, -31.204488 ], [ 117.498436, -31.265786 ], [ 117.497728, -31.273086 ], [ 117.497706, -31.278551 ], [ 117.497706, -31.280018 ], [ 117.447710, -31.280018 ], [ 117.447710, -31.278551 ], [ 117.447731, -31.266538 ], [ 117.448440, -31.265823 ], [ 117.448397, -31.204525 ], [ 117.447646, -31.204800 ], [ 117.446809, -31.205295 ], [ 117.446079, -31.205938 ], [ 117.445049, -31.207296 ], [ 117.444191, -31.208158 ], [ 117.443140, -31.208801 ], [ 117.441938, -31.209204 ], [ 117.440715, -31.209333 ], [ 117.426531, -31.209516 ], [ 117.426531, -31.201937 ], [ 117.498114, -31.201937 ], [ 117.498264, -31.203405 ] ] ] } }
] }
] }
,

@ -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;
}

132
tile.cpp

@ -188,9 +188,9 @@ int coalindexcmp(const struct coalesce *c1, const struct coalesce *c2) {
return cmp;
}
mvt_value retrieve_string(long long off, char *stringpool, int *otype) {
mvt_value retrieve_string(long long off, const char *stringpool, int *otype) {
int type = stringpool[off];
char *s = stringpool + off + 1;
const char *s = stringpool + off + 1;
if (otype != NULL) {
*otype = type;
@ -248,6 +248,73 @@ static int metacmp(const std::vector<long long> &keys1, const std::vector<long l
}
}
static mvt_value find_attribute_value(const struct coalesce *c1, std::string key) {
const std::vector<long long> &keys1 = c1->keys;
const std::vector<long long> &values1 = c1->values;
const char *stringpool1 = c1->stringpool;
for (size_t i = 0; i < keys1.size(); i++) {
mvt_value key1 = retrieve_string(keys1[i], stringpool1, NULL);
if (key == key1.string_value) {
return retrieve_string(values1[i], stringpool1, NULL);
}
}
for (size_t i = 0; i < c1->full_keys.size(); i++) {
if (c1->full_keys[i] == key) {
return stringified_to_mvt_value(c1->full_values[i].type, c1->full_values[i].s.c_str());
}
}
mvt_value v;
v.type = mvt_null;
v.numeric_value.null_value = 0;
return v;
}
static mvt_value coerce_double(mvt_value v) {
if (v.type == mvt_int) {
v.type = mvt_double;
v.numeric_value.double_value = v.numeric_value.int_value;
} else if (v.type == mvt_uint) {
v.type = mvt_double;
v.numeric_value.double_value = v.numeric_value.uint_value;
} else if (v.type == mvt_sint) {
v.type = mvt_double;
v.numeric_value.double_value = v.numeric_value.sint_value;
} else if (v.type == mvt_float) {
v.type = mvt_double;
v.numeric_value.double_value = v.numeric_value.float_value;
}
return v;
}
struct ordercmp {
bool operator()(const struct coalesce &a, const struct coalesce &b) {
for (size_t i = 0; i < order_by.size(); i++) {
mvt_value v1 = coerce_double(find_attribute_value(&a, order_by[i].name));
mvt_value v2 = coerce_double(find_attribute_value(&b, order_by[i].name));
if (order_by[i].descending) {
if (v2 < v1) {
return true;
} else if (v1 < v2) {
return false;
} // else they are equal, so continue to the next attribute
} else {
if (v1 < v2) {
return true;
} else if (v2 < v1) {
return false;
} // else they are equal, so continue to the next attribute
}
}
return false; // greater than or equal
}
} ordercmp;
void rewrite(drawvec &geom, int z, int nextzoom, int maxzoom, long long *bbox, unsigned tx, unsigned ty, int buffer, int *within, std::atomic<long long> *geompos, FILE **geomfile, const char *fname, signed char t, int layer, long long metastart, signed char feature_minzoom, int child_shards, int max_zoom_increment, long long seq, int tippecanoe_minzoom, int tippecanoe_maxzoom, int segment, unsigned *initial_x, unsigned *initial_y, std::vector<long long> &metakeys, std::vector<long long> &metavals, bool has_id, unsigned long long id, unsigned long long index, long long extent) {
if (geom.size() > 0 && (nextzoom <= maxzoom || additional[A_EXTEND_ZOOMS])) {
int xo, yo;
@ -374,6 +441,7 @@ struct partial {
bool reduced = 0;
int z = 0;
int line_detail = 0;
int extra_detail = 0;
int maxzoom = 0;
double spacing = 0;
double simplification = 0;
@ -452,6 +520,7 @@ void *partial_feature_worker(void *v) {
signed char t = (*partials)[i].t;
int z = (*partials)[i].z;
int line_detail = (*partials)[i].line_detail;
int out_detail = (*partials)[i].extra_detail;
int maxzoom = (*partials)[i].maxzoom;
if (additional[A_GRID_LOW_ZOOMS] && z < maxzoom) {
@ -464,8 +533,13 @@ void *partial_feature_worker(void *v) {
}
if ((t == VT_LINE || t == VT_POLYGON) && !(prevent[P_SIMPLIFY] || (z == maxzoom && prevent[P_SIMPLIFY_LOW]) || (z < maxzoom && additional[A_GRID_LOW_ZOOMS]))) {
if (1 /* !reduced */) { // XXX why did this not simplify if reduced?
// Now I finally remember why it doesn't simplify if the feature was reduced:
// because it makes square placeholders look like weird triangular placeholders.
// Only matters if simplification is set higher than the tiny polygon size.
// Tiny polygons that are part of a tiny multipolygon will still get simplified.
if (!(*partials)[i].reduced) {
if (t == VT_LINE) {
// continues to deduplicate to line_detail even if we have extra detail
geom = remove_noop(geom, t, 32 - z - line_detail);
}
@ -475,6 +549,7 @@ void *partial_feature_worker(void *v) {
}
if (!already_marked) {
// continues to simplify to line_detail even if we have extra detail
drawvec ngeom = simplify_lines(geom, z, line_detail, !(prevent[P_CLIPPING] || prevent[P_DUPLICATION]), (*partials)[i].simplification, t == VT_POLYGON ? 4 : 0, *(a->shared_nodes));
if (t != VT_POLYGON || ngeom.size() >= 3) {
@ -484,17 +559,11 @@ void *partial_feature_worker(void *v) {
}
}
#if 0
if (t == VT_LINE && z != basezoom) {
geom = shrink_lines(geom, z, line_detail, basezoom, &along);
}
#endif
if (t == VT_LINE && additional[A_REVERSE]) {
geom = reorder_lines(geom);
}
to_tile_scale(geom, z, line_detail);
to_tile_scale(geom, z, out_detail);
std::vector<drawvec> geoms;
geoms.push_back(geom);
@ -511,7 +580,8 @@ void *partial_feature_worker(void *v) {
if (geoms[g].size() < 3) {
if (area > 0) {
geoms[g] = revive_polygon(before, area / geoms.size(), z, line_detail);
// area is in world coordinates, calculated before scaling down
geoms[g] = revive_polygon(before, area / geoms.size(), z, out_detail);
} else {
geoms[g].clear();
}
@ -1721,8 +1791,7 @@ static bool line_is_too_small(drawvec const &geometry, int z, int detail) {
return true;
}
long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *metabase, char *stringpool, int z, unsigned tx, unsigned ty, int detail, int min_detail, sqlite3 *outdb, const char *outdir, int buffer, const char *fname, FILE **geomfile, int minzoom, int maxzoom, double todo, std::atomic<long long> *along, long long alongminus, double gamma, int child_shards, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, std::atomic<int> *running, double simplification, std::vector<std::map<std::string, layermap_entry>> *layermaps, std::vector<std::vector<std::string>> *layer_unmaps, size_t tiling_seg, size_t pass, size_t passes, unsigned long long mingap, long long minextent, double fraction, const char *prefilter, const char *postfilter, struct json_object *filter, write_tile_args *arg, atomic_strategy *strategy) {
int line_detail;
long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *metabase, char *stringpool, int z, unsigned tx, unsigned ty, const int detail, int min_detail, sqlite3 *outdb, const char *outdir, int buffer, const char *fname, FILE **geomfile, int minzoom, int maxzoom, double todo, std::atomic<long long> *along, long long alongminus, double gamma, int child_shards, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y, std::atomic<int> *running, double simplification, std::vector<std::map<std::string, layermap_entry>> *layermaps, std::vector<std::vector<std::string>> *layer_unmaps, size_t tiling_seg, size_t pass, size_t passes, unsigned long long mingap, long long minextent, double fraction, const char *prefilter, const char *postfilter, struct json_object *filter, write_tile_args *arg, atomic_strategy *strategy) {
double merge_fraction = 1;
double mingap_fraction = 1;
double minextent_fraction = 1;
@ -1755,6 +1824,7 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
bool first_time = true;
// This only loops if the tile data didn't fit, in which case the detail
// goes down and the progress indicator goes backward for the next try.
int line_detail;
for (line_detail = detail; line_detail >= min_detail || line_detail == detail; line_detail--, oprogress = 0) {
long long count = 0;
double accum_area = 0;
@ -1777,6 +1847,8 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
double coalesced_area = 0;
drawvec shared_nodes;
int tile_detail = line_detail;
int within[child_shards];
std::atomic<long long> geompos[child_shards];
for (size_t i = 0; i < (size_t) child_shards; i++) {
@ -1875,8 +1947,15 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
}
if (sf.t == VT_POINT) {
double radius = sqrt(sf.index - extent_previndex) / 4.0;
sf.extent = M_PI * radius * radius;
if (extent_previndex >= sf.index) {
sf.extent = 1;
} else {
double radius = sqrt(sf.index - extent_previndex) / 4.0;
sf.extent = M_PI * radius * radius;
if (sf.extent < 1) {
sf.extent = 1;
}
}
extent_previndex = sf.index;
}
@ -1982,6 +2061,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;
}
@ -2007,6 +2089,7 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
p.reduced = reduced;
p.z = z;
p.line_detail = line_detail;
p.extra_detail = line_detail;
p.maxzoom = maxzoom;
p.keys = sf.keys;
p.values = sf.values;
@ -2020,6 +2103,17 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
p.renamed = -1;
p.extent = sf.extent;
p.clustered = 0;
if (line_detail == detail && extra_detail >= 0 && z == maxzoom) {
p.extra_detail = extra_detail;
// maximum allowed coordinate delta in geometries is 2^31 - 1
// so we need to stay under that, including the buffer
if (p.extra_detail >= 30 - z) {
p.extra_detail = 30 - z;
}
tile_detail = p.extra_detail;
}
partials.push_back(p);
}
@ -2262,6 +2356,10 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
if (prevent[P_INPUT_ORDER]) {
std::sort(layer_features.begin(), layer_features.end(), preservecmp);
}
if (order_by.size() != 0) {
std::sort(layer_features.begin(), layer_features.end(), ordercmp);
}
}
mvt_tile tile;
@ -2272,7 +2370,7 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
mvt_layer layer;
layer.name = layer_iterator->first;
layer.version = 2;
layer.extent = 1 << line_detail;
layer.extent = 1 << tile_detail;
for (size_t x = 0; x < layer_features.size(); x++) {
mvt_feature feature;
@ -2330,7 +2428,7 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
}
if (postfilter != NULL) {
tile.layers = filter_layers(postfilter, tile.layers, z, tx, ty, layermaps, tiling_seg, layer_unmaps, 1 << line_detail);
tile.layers = filter_layers(postfilter, tile.layers, z, tx, ty, layermaps, tiling_seg, layer_unmaps, 1 << tile_detail);
}
if (z == 0 && unclipped_features < original_features / 2 && clipbboxes.size() == 0) {

@ -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;

@ -1,6 +1,6 @@
#ifndef VERSION_HPP
#define VERSION_HPP
#define VERSION "v2.4.1"
#define VERSION "v2.5.0"
#endif