Merge pull request #574 from mapbox/layer-description

Add the option to specify layer file, name, and description as JSON
This commit is contained in:
Eric Fischer 2018-05-25 01:49:06 +02:00 committed by GitHub
commit 38bca4a179
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 1226 additions and 60 deletions

View File

@ -1,3 +1,12 @@
## 1.29.0
* Add the option to specify layer file, name, and description as JSON
* Add the option to specify the description for attributes in the
tileset metadata
* In CSV input, a trailing comma now counts as a trailing empty field
* In tippecanoe-json-tool, an empty CSV field is now an empty string,
not null (for consistency with tile-join)
## 1.28.1
* Explicitly check for infinite and not-a-number input coordinates

View File

@ -82,7 +82,7 @@ indent:
TESTS = $(wildcard tests/*/out/*.json)
SPACE = $(NULL) $(NULL)
test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test join-filter-test unit json-tool-test allow-existing-test csv-test
test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test join-filter-test unit json-tool-test allow-existing-test csv-test layer-json-test
./unit
suffixes = json json.gz
@ -169,7 +169,7 @@ enumerate-test:
rm tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/out/enum.check
join-test: tile-join
./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles tests/join-population/tabblock_06001420.json
./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}'
./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json
./tile-join -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles
./tippecanoe-decode tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check
@ -199,7 +199,7 @@ join-test: tile-join
cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json
./tile-join --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles
diff -x '*.DS_Store' -rq tests/join-population/raw-merged-folder tests/join-population/raw-merged-folder-compare
./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder tests/join-population/tabblock_06001420.json
./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}'
./tippecanoe -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json
./tippecanoe -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json
./tile-join -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder
@ -277,6 +277,12 @@ csv-test:
cmp tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles.json
rm -f tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles
layer-json-test:
./tippecanoe -z0 -r1 -yNAME -f -o tests/layer-json/out.mbtiles -L'{"file":"tests/ne_110m_populated_places/in.json", "description":"World cities", "layer":"places"}'
./tippecanoe-decode tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check
cmp tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles.json
rm -f tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles
# Use this target to regenerate the standards that the tests are compared against
# after making a change that legitimately changes their output

View File

@ -148,6 +148,11 @@ If your input is formatted as newline-delimited GeoJSON, use `-P` to make input
* `-l` _name_ or `--layer=`_name_: Use the specified layer name instead of deriving a name from the input filename or output tileset. If there are multiple input files
specified, the files are all merged into the single named layer, even if they try to specify individual names with `-L`.
* `-L` _name_`:`_file.json_ or `--named-layer=`_name_`:`_file.json_: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like `-L` _name_`:<(cat dir/*.json)` to specify a layer name for the output of streamed input.
* `-L{`_layer-json_`}` or `--named-layer={`_layer-json_`}`: Specify an input file and layer options by a JSON object. The JSON object must contain a `"file"` key to specify the filename to read from. It may also contain a `"layer"` field to specify the name of the layer, and/or a `"description"` field to specify the layer's description in the tileset metadata. Example:
```
tippecanoe -z5 -o world.mbtiles -L'{"file":"ne_10m_admin_0_countries.json", "layer":"countries", "description":"Natural Earth countries"}'
```
CSV input files currently support only Point geometries, from columns named `latitude`, `longitude`, `lat`, `lon`, `long`, `lng`, `x`, or `y`.
@ -204,6 +209,7 @@ resolution is obtained than by using a smaller _maxzoom_ or _detail_.
If the type is `bool`, then original attributes of `0` (or, if numeric, `0.0`, etc.), `false`, `null`, or the empty string become `false`, and otherwise become `true`.
If the type is `float` or `int` and the original attribute was non-numeric, it becomes `0`.
If the type is `int` and the original attribute was floating-point, it is rounded to the nearest integer.
* `-Y`_attribute_`:`_description_ or `--attribute-description=`_attribute_`:`_description_: Set the `description` for the specified attribute in the tileset metadata to _description_ instead of the usual `String`, `Number`, or `Boolean`.
* `-E`_attribute_`:`_operation_ or `--accumulate-attribute=`_attribute_`:`_operation_: Preserve the named _attribute_ from features
that are dropped, coalesced-as-needed, or clustered. The _operation_ may be
`sum`, `product`, `mean`, `max`, `min`, `concat`, or `comma`

View File

@ -27,6 +27,11 @@ std::vector<std::string> csv_split(const char *s) {
while (*s && isspace(*s)) {
s++;
}
if (*s == '\0' || *s == '\r' || *s == '\n') {
ret.push_back(std::string(""));
break;
}
}
}

View File

@ -318,7 +318,9 @@ void join_csv(json_object *j) {
} else if (is_number(v)) {
attr_type = JSON_NUMBER;
}
}
{
// This knows more about the structure of JSON objects than it ought to
json_object *ko = (json_object *) malloc(sizeof(json_object));

View File

@ -83,6 +83,7 @@ int additional[256];
struct source {
std::string layer = "";
std::string file = "";
std::string description = "";
};
size_t CPUS;
@ -1133,7 +1134,7 @@ void choose_first_zoom(long long *file_bbox, std::vector<struct reader> &readers
}
}
int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, const char *outdir, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, json_object *filter, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, std::map<std::string, int> const *attribute_types, const char *pgm, std::map<std::string, attribute_op> const *attribute_accum) {
int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, const char *outdir, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, json_object *filter, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, std::map<std::string, int> const *attribute_types, const char *pgm, std::map<std::string, attribute_op> const *attribute_accum, std::map<std::string, std::string> const &attribute_descriptions) {
int ret = EXIT_SUCCESS;
std::vector<struct reader> readers;
@ -1303,6 +1304,7 @@ int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzo
std::map<std::string, layermap_entry> layermap;
for (size_t l = 0; l < nlayers; l++) {
layermap_entry e = layermap_entry(l);
e.description = sources[l].description;
layermap.insert(std::pair<std::string, layermap_entry>(sources[l].layer, e));
}
@ -2297,7 +2299,7 @@ int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzo
ai->second.maxzoom = maxzoom;
}
mbtiles_write_metadata(outdb, outdir, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm, true, description, !prevent[P_TILE_STATS]);
mbtiles_write_metadata(outdb, outdir, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm, true, description, !prevent[P_TILE_STATS], attribute_descriptions);
return ret;
}
@ -2372,6 +2374,42 @@ void set_attribute_accum(std::map<std::string, attribute_op> &attribute_accum, c
attribute_accum.insert(std::pair<std::string, attribute_op>(name, t));
}
void parse_json_source(const char *arg, struct source &src) {
json_pull *jp = json_begin_string(arg);
json_object *o = json_read_tree(jp);
if (o == NULL) {
fprintf(stderr, "%s: -L%s: %s\n", *av, arg, jp->error);
exit(EXIT_FAILURE);
}
if (o->type != JSON_HASH) {
fprintf(stderr, "%s: -L%s: not a JSON object\n", *av, arg);
exit(EXIT_FAILURE);
}
json_object *fname = json_hash_get(o, "file");
if (fname == NULL || fname->type != JSON_STRING) {
fprintf(stderr, "%s: -L%s: requires \"file\": filename\n", *av, arg);
exit(EXIT_FAILURE);
}
src.file = std::string(fname->string);
json_object *layer = json_hash_get(o, "layer");
if (layer != NULL && layer->type == JSON_STRING) {
src.layer = std::string(layer->string);
}
json_object *description = json_hash_get(o, "description");
if (description != NULL && description->type == JSON_STRING) {
src.description = std::string(description->string);
}
json_free(o);
json_end(jp);
}
int main(int argc, char **argv) {
#ifdef MTRACE
mtrace();
@ -2409,6 +2447,7 @@ int main(int argc, char **argv) {
std::set<std::string> exclude, include;
std::map<std::string, int> attribute_types;
std::map<std::string, attribute_op> attribute_accum;
std::map<std::string, std::string> attribute_descriptions;
int exclude_all = 0;
int read_parallel = 0;
int files_open_at_start;
@ -2459,6 +2498,7 @@ int main(int argc, char **argv) {
{"Modifying feature attributes", 0, 0, 0},
{"attribute-type", required_argument, 0, 'T'},
{"attribute-description", required_argument, 0, 'Y'},
{"accumulate-attribute", required_argument, 0, 'E'},
{"Filtering features by attributes", 0, 0, 0},
@ -2605,14 +2645,18 @@ int main(int argc, char **argv) {
break;
case 'L': {
char *cp = strchr(optarg, ':');
if (cp == NULL || cp == optarg) {
fprintf(stderr, "%s: -L requires layername:file\n", argv[0]);
exit(EXIT_FAILURE);
}
struct source src;
src.layer = std::string(optarg).substr(0, cp - optarg);
src.file = std::string(cp + 1);
if (optarg[0] == '{') {
parse_json_source(optarg, src);
} else {
char *cp = strchr(optarg, ':');
if (cp == NULL || cp == optarg) {
fprintf(stderr, "%s: -L requires layername:file\n", argv[0]);
exit(EXIT_FAILURE);
}
src.layer = std::string(optarg).substr(0, cp - optarg);
src.file = std::string(cp + 1);
}
sources.push_back(src);
break;
}
@ -2724,6 +2768,17 @@ int main(int argc, char **argv) {
exclude_all = 1;
break;
case 'Y': {
char *cp = strchr(optarg, ':');
if (cp == NULL || cp == optarg) {
fprintf(stderr, "%s: -Y requires attribute:description\n", argv[0]);
exit(EXIT_FAILURE);
}
std::string attrib = std::string(optarg).substr(0, cp - optarg);
std::string desc = std::string(cp + 1);
attribute_descriptions.insert(std::pair<std::string, std::string>(attrib, desc));
} break;
case 'J':
filter = read_filter(optarg);
break;
@ -2995,7 +3050,7 @@ int main(int argc, char **argv) {
long long file_bbox[4] = {UINT_MAX, UINT_MAX, 0, 0};
ret = read_input(sources, name ? name : out_mbtiles ? out_mbtiles : out_dir, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, out_dir, &exclude, &include, exclude_all, filter, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox, prefilter, postfilter, description, guess_maxzoom, &attribute_types, argv[0], &attribute_accum);
ret = read_input(sources, name ? name : out_mbtiles ? out_mbtiles : out_dir, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, out_dir, &exclude, &include, exclude_all, filter, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox, prefilter, postfilter, description, guess_maxzoom, &attribute_types, argv[0], &attribute_accum, attribute_descriptions);
if (outdb != NULL) {
mbtiles_close(outdb, argv[0]);

View File

@ -159,6 +159,14 @@ or if metadata fields can't be set. You probably don't want to use this.
specified, the files are all merged into the single named layer, even if they try to specify individual names with \fB\fC\-L\fR\&.
.IP \(bu 2
\fB\fC\-L\fR \fIname\fP\fB\fC:\fR\fIfile.json\fP or \fB\fC\-\-named\-layer=\fR\fIname\fP\fB\fC:\fR\fIfile.json\fP: Specify layer names for individual files. If your shell supports it, you can use a subshell redirect like \fB\fC\-L\fR \fIname\fP\fB\fC:<(cat dir/*.json)\fR to specify a layer name for the output of streamed input.
.IP \(bu 2
\fB\fC\-L{\fR\fIlayer\-json\fP\fB\fC}\fR or \fB\fC\-\-named\-layer={\fR\fIlayer\-json\fP\fB\fC}\fR: Specify an input file and layer options by a JSON object. The JSON object must contain a \fB\fC"file"\fR key to specify the filename to read from. It may also contain a \fB\fC"layer"\fR field to specify the name of the layer, and/or a \fB\fC"description"\fR field to specify the layer's description in the tileset metadata. Example:
.RE
.PP
.RS
.nf
tippecanoe \-z5 \-o world.mbtiles \-L'{"file":"ne_10m_admin_0_countries.json", "layer":"countries", "description":"Natural Earth countries"}'
.fi
.RE
.PP
CSV input files currently support only Point geometries, from columns named \fB\fClatitude\fR, \fB\fClongitude\fR, \fB\fClat\fR, \fB\fClon\fR, \fB\fClong\fR, \fB\fClng\fR, \fB\fCx\fR, or \fB\fCy\fR\&.
@ -230,6 +238,8 @@ If the type is \fB\fCbool\fR, then original attributes of \fB\fC0\fR (or, if num
If the type is \fB\fCfloat\fR or \fB\fCint\fR and the original attribute was non\-numeric, it becomes \fB\fC0\fR\&.
If the type is \fB\fCint\fR and the original attribute was floating\-point, it is rounded to the nearest integer.
.IP \(bu 2
\fB\fC\-Y\fR\fIattribute\fP\fB\fC:\fR\fIdescription\fP or \fB\fC\-\-attribute\-description=\fR\fIattribute\fP\fB\fC:\fR\fIdescription\fP: Set the \fB\fCdescription\fR for the specified attribute in the tileset metadata to \fIdescription\fP instead of the usual \fB\fCString\fR, \fB\fCNumber\fR, or \fB\fCBoolean\fR\&.
.IP \(bu 2
\fB\fC\-E\fR\fIattribute\fP\fB\fC:\fR\fIoperation\fP or \fB\fC\-\-accumulate\-attribute=\fR\fIattribute\fP\fB\fC:\fR\fIoperation\fP: Preserve the named \fIattribute\fP from features
that are dropped, coalesced\-as\-needed, or clustered. The \fIoperation\fP may be
\fB\fCsum\fR, \fB\fCproduct\fR, \fB\fCmean\fR, \fB\fCmax\fR, \fB\fCmin\fR, \fB\fCconcat\fR, or \fB\fCcomma\fR

View File

@ -264,7 +264,7 @@ void tilestats(std::map<std::string, layermap_entry> const &layermap1, size_t el
state.json_end_hash();
}
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description, bool do_tilestats) {
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description, bool do_tilestats, std::map<std::string, std::string> const &attribute_descriptions) {
char *sql, *err;
sqlite3 *db = outdb;
@ -397,7 +397,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam
state.json_write_string(lnames[i]);
state.json_write_string("description");
state.json_write_string("");
state.json_write_string(fk->second.description);
state.json_write_string("minzoom");
state.json_write_signed(fk->second.minzoom);
@ -417,19 +417,24 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam
state.json_write_string(j->first);
int type = 0;
for (auto s : j->second.sample_values) {
type |= (1 << s.type);
}
auto f = attribute_descriptions.find(j->first);
if (f == attribute_descriptions.end()) {
int type = 0;
for (auto s : j->second.sample_values) {
type |= (1 << s.type);
}
if (type == (1 << mvt_double)) {
state.json_write_string("Number");
} else if (type == (1 << mvt_bool)) {
state.json_write_string("Boolean");
} else if (type == (1 << mvt_string)) {
state.json_write_string("String");
if (type == (1 << mvt_double)) {
state.json_write_string("Number");
} else if (type == (1 << mvt_bool)) {
state.json_write_string("Boolean");
} else if (type == (1 << mvt_string)) {
state.json_write_string("String");
} else {
state.json_write_string("Mixed");
}
} else {
state.json_write_string("Mixed");
state.json_write_string(f->second);
}
}
@ -550,6 +555,7 @@ std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::
auto out_entry = out.find(layername);
out_entry->second.minzoom = map->second.minzoom;
out_entry->second.maxzoom = map->second.maxzoom;
out_entry->second.description = map->second.description;
}
auto out_entry = out.find(layername);

View File

@ -25,6 +25,7 @@ struct layermap_entry {
std::map<std::string, type_and_string_stats> file_keys{};
int minzoom = 0;
int maxzoom = 0;
std::string description = "";
size_t points = 0;
size_t lines = 0;
@ -40,7 +41,7 @@ sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable);
void mbtiles_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size);
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description, bool do_tilestats);
void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description, bool do_tilestats, std::map<std::string, std::string> const &attribute_descriptions);
void mbtiles_close(sqlite3 *outdb, const char *pgm);

View File

@ -239,10 +239,10 @@ scalerank,natscale,labelrank,featurecla,name,namepar,namealt,diffascii,nameascii
0,600,1,Admin-1 capital,Kolkata,Calcutta,,0,Kolkata,0.00000000000,,,0.00000000000,1,India,IND,India,IND,West Bengal,IN,,22.49496929830,88.32467565810,4.00000000000,1,Name changed. Changed scale rank.,14787000,4631392,7783716,14,12,1275004.00000000000,Kolkata,Calcutta,1,0,3.7
0,600,1,Admin-1 capital,Rio de Janeiro,,,0,Rio de Janeiro,0.00000000000,,,1.00000000000,1,Brazil,BRA,Brazil,BRA,Rio de Janeiro,BR,,-22.92502317420,-43.22502079420,0.00000000000,0,,11748000,2010175,1821489,14,12,3451190.00000000000,Rio de Janeiro,Rio de Janeiro,1,0,1.7
0,600,1,Admin-1 capital,São Paulo,,Sao Paulo|Sio Paulo,0,Sao Paulo,0.00000000000,,,1.00000000000,1,Brazil,BRA,Brazil,BRA,São Paulo,BR,,-23.55867958700,-46.62501998040,0.00000000000,0,,18845000,10021295,11522944,14,14,3448439.00000000000,S,Sao Paolo,1,0,3.0
0,600,3,Admin-1 capital,Sydney,,,0,Sydney,0.00000000000,,,1.00000000000,1,Australia,AUS,Australia,AUS,New South Wales,AU,,-33.92001096720,151.18517980900,4.00000000000,0,Changed feature class.,4630000,3641422,2669348,12,12,2147714.00000000000,Sydney,Sydney1,1,0,1.7
0,600,3,Admin-1 capital,Sydney,,,0,Sydney,0.00000000000,,,1.00000000000,1,Australia,AUS,Australia,AUS,New South Wales,AU,,-33.92001096720,151.18517980900,4.00000000000,0,Changed feature class.,4630000,3641422,2669348,12,12,2147714.00000000000,Sydney,Sydney1,1,0,
0,600,0,Admin-0 capital,Singapore,,,0,Singapore,1.00000000000,,,1.00000000000,1,Singapore,SGP,Singapore,SGP,,SG,,1.29303346649,103.85582067800,0.00000000000,0,,5183700,3289529,3314179,13,12,1880252.00000000000,Singapore,Singapore,1,5,2.1
0,600,0,Admin-0 region capital,Hong Kong,,,0,Hong Kong,0.00000000000,,,1.00000000000,1,China,CHN,Hong Kong S.A.R.,HKG,,HK,,22.30498089500,114.18500931700,0.00000000000,0,,7206000,4551579,4549026,13,12,1819729.00000000000,Hong Kong,Hong Kong,1,0,3.0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0,600,0,Admin-0 region capital,Hong Kong,,,0,Hong Kong,0.00000000000,,,1.00000000000,1,China,CHN,Hong Kong S.A.R.,HKG,,HK,,nan,114.18500931700,0.00000000000,0,,7206000,4551579,4549026,13,12,1819729.00000000000,Hong Kong,Hong Kong,1,0,3.0
0,600,0,Admin-0 region capital,Hong Kong,,,0,Hong Kong,0.00000000000,,,1.00000000000,1,China,CHN,Hong Kong S.A.R.,HKG,,HK,,inf,114.18500931700,0.00000000000,0,,7206000,4551579,4549026,13,12,1819729.00000000000,Hong Kong,Hong Kong,1,0,3.0
0,600,0,Admin-0 region capital,Hong Kong,,,0,Hong Kong,0.00000000000,,,1.00000000000,1,China,CHN,Hong Kong S.A.R.,HKG,,HK,,22.30498089500,nan,0.00000000000,0,,7206000,4551579,4549026,13,12,1819729.00000000000,Hong Kong,Hong Kong,1,0,3.0

Can't render this file because it has a wrong number of fields in line 245.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
"center": "-122.299805,37.892187,12",
"description": "tests/join-population/tabblock_06001420.mbtiles",
"format": "pbf",
"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Number\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Number\"} } ]}",
"json": "{\"vector_layers\": [ { \"id\": \"tabblock_06001420\", \"description\": \"population\", \"minzoom\": 3, \"maxzoom\": 12, \"fields\": {\"ALAND10\": \"Land area\", \"AWATER10\": \"Number\", \"BLOCKCE10\": \"String\", \"COUNTYFP10\": \"String\", \"FUNCSTAT10\": \"String\", \"INTPTLAT10\": \"String\", \"INTPTLON10\": \"String\", \"MTFCC10\": \"String\", \"NAME10\": \"String\", \"STATEFP10\": \"String\", \"TRACTCE10\": \"String\", \"UACE10\": \"String\", \"UATYP10\": \"String\", \"UR10\": \"String\", \"population\": \"Mixed\"} } ]}",
"maxzoom": "12",
"minzoom": "0",
"name": "tests/join-population/tabblock_06001420.mbtiles",
@ -472,7 +472,7 @@
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3017", "population": 12, "NAME10": "Block 3017", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 6343, "AWATER10": 0, "INTPTLAT10": "+37.884079", "INTPTLON10": "-122.290980" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290878, 37.885693 ], [ -122.290878, 37.884609 ], [ -122.292252, 37.884609 ], [ -122.292252, 37.885693 ], [ -122.290878, 37.885693 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.884067 ], [ -122.290192, 37.882983 ], [ -122.291565, 37.882983 ], [ -122.291565, 37.884067 ], [ -122.290192, 37.884067 ] ] ] } }
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": "", "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.884067 ], [ -122.290192, 37.882983 ], [ -122.291565, 37.882983 ], [ -122.291565, 37.884067 ], [ -122.290192, 37.884067 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "1023", "population": 41, "NAME10": "Block 1023", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 15260, "AWATER10": 0, "INTPTLAT10": "+37.884009", "INTPTLON10": "-122.289530" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.288818, 37.885151 ], [ -122.289505, 37.883525 ], [ -122.290192, 37.883525 ], [ -122.290192, 37.885151 ], [ -122.288818, 37.885151 ] ] ] } }
,
@ -880,7 +880,7 @@
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5264, "AWATER10": 0, "INTPTLAT10": "+37.883995", "INTPTLON10": "-122.291315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291565, 37.885151 ], [ -122.291222, 37.883254 ], [ -122.291908, 37.884880 ], [ -122.291565, 37.885151 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885422 ], [ -122.289848, 37.884609 ], [ -122.290535, 37.883254 ], [ -122.291222, 37.885151 ], [ -122.290192, 37.885422 ] ] ] } }
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": "", "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885422 ], [ -122.289848, 37.884609 ], [ -122.290535, 37.883254 ], [ -122.291222, 37.885151 ], [ -122.290192, 37.885422 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1094, "AWATER10": 0, "INTPTLAT10": "+37.885399", "INTPTLON10": "-122.289471" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289162, 37.886235 ], [ -122.289162, 37.885693 ], [ -122.289848, 37.885693 ], [ -122.289848, 37.886235 ], [ -122.289162, 37.886235 ] ] ] } }
,
@ -1344,7 +1344,7 @@
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5264, "AWATER10": 0, "INTPTLAT10": "+37.883995", "INTPTLON10": "-122.291315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291565, 37.885015 ], [ -122.290878, 37.883389 ], [ -122.291222, 37.883254 ], [ -122.291393, 37.883254 ], [ -122.291908, 37.884880 ], [ -122.291565, 37.885015 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885286 ], [ -122.289848, 37.884609 ], [ -122.290363, 37.883119 ], [ -122.290535, 37.883254 ], [ -122.291222, 37.885015 ], [ -122.290192, 37.885286 ] ] ] } }
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": "", "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885286 ], [ -122.289848, 37.884609 ], [ -122.290363, 37.883119 ], [ -122.290535, 37.883254 ], [ -122.291222, 37.885015 ], [ -122.290192, 37.885286 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1094, "AWATER10": 0, "INTPTLAT10": "+37.885399", "INTPTLON10": "-122.289471" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289677, 37.885964 ], [ -122.289333, 37.885964 ], [ -122.289333, 37.885557 ], [ -122.289677, 37.885557 ], [ -122.289677, 37.885964 ] ] ] } }
,
@ -1856,7 +1856,7 @@
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5264, "AWATER10": 0, "INTPTLAT10": "+37.883995", "INTPTLON10": "-122.291315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291565, 37.884948 ], [ -122.290878, 37.883322 ], [ -122.291136, 37.883254 ], [ -122.291307, 37.883254 ], [ -122.291822, 37.884880 ], [ -122.291565, 37.884948 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885219 ], [ -122.289848, 37.884541 ], [ -122.290363, 37.883051 ], [ -122.290449, 37.883254 ], [ -122.291222, 37.885015 ], [ -122.290192, 37.885219 ] ] ] } }
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": "", "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885219 ], [ -122.289848, 37.884541 ], [ -122.290363, 37.883051 ], [ -122.290449, 37.883254 ], [ -122.291222, 37.885015 ], [ -122.290192, 37.885219 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1094, "AWATER10": 0, "INTPTLAT10": "+37.885399", "INTPTLON10": "-122.289471" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289333, 37.885896 ], [ -122.289677, 37.884880 ], [ -122.289762, 37.884948 ], [ -122.289333, 37.885896 ] ] ] } }
,
@ -2380,7 +2380,7 @@
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420500", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 5264, "AWATER10": 0, "INTPTLAT10": "+37.883995", "INTPTLON10": "-122.291315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.291522, 37.884914 ], [ -122.290835, 37.883322 ], [ -122.291093, 37.883254 ], [ -122.291265, 37.883254 ], [ -122.291780, 37.884880 ], [ -122.291522, 37.884914 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": 32, "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885219 ], [ -122.289848, 37.884507 ], [ -122.290320, 37.883051 ], [ -122.290320, 37.883220 ], [ -122.290406, 37.883220 ], [ -122.291179, 37.884981 ], [ -122.290192, 37.885219 ] ] ] } }
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "3018", "population": "", "NAME10": "Block 3018", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 14557, "AWATER10": 0, "INTPTLAT10": "+37.884369", "INTPTLON10": "-122.290441" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.290192, 37.885219 ], [ -122.289848, 37.884507 ], [ -122.290320, 37.883051 ], [ -122.290320, 37.883220 ], [ -122.290406, 37.883220 ], [ -122.291179, 37.884981 ], [ -122.290192, 37.885219 ] ] ] } }
,
{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "001", "TRACTCE10": "420600", "BLOCKCE10": "2016", "NAME10": "Block 2016", "MTFCC10": "G5040", "UR10": "U", "UACE10": "78904", "UATYP10": "U", "FUNCSTAT10": "S", "ALAND10": 1094, "AWATER10": 0, "INTPTLAT10": "+37.885399", "INTPTLON10": "-122.289471" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.289333, 37.885998 ], [ -122.289290, 37.885862 ], [ -122.289634, 37.884880 ], [ -122.289720, 37.884914 ], [ -122.289333, 37.885998 ] ] ] } }
,

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

View File

@ -160,4 +160,4 @@ GEOID10, population
"060014206003014",66
"060014206003015",15
"060014206003017",12
"060014206003018",32
"060014206003018",

1 GEOID10 population
160 060014206003014 66
161 060014206003015 15
162 060014206003017 12
163 060014206003018 32

File diff suppressed because one or more lines are too long

View File

@ -257,4 +257,4 @@
{"type":"Feature","properties":{"STATEFP10":"06","COUNTYFP10":"001","TRACTCE10":"420600","BLOCKCE10":"3015","GEOID10":"060014206003015","NAME10":"Block 3015","MTFCC10":"G5040","UR10":"U","UACE10":"78904","UATYP10":"U","FUNCSTAT10":"S","ALAND10":10776.000000,"AWATER10":0.000000,"INTPTLAT10":"+37.886322","INTPTLON10":"-122.291817","population":15},"geometry":{"type":"Polygon","coordinates":[[[-122.292106,37.887778],[-122.29117,37.884974],[-122.291516,37.884897],[-122.291677,37.885275],[-122.291733,37.885447],[-122.292038,37.886378],[-122.292198,37.886874],[-122.292278,37.887138],[-122.29245,37.887705],[-122.292381,37.887719],[-122.292174,37.887763],[-122.292106,37.887778]]]}}
{"type":"Feature","properties":{"STATEFP10":"06","COUNTYFP10":"001","TRACTCE10":"420600","BLOCKCE10":"3016","GEOID10":"060014206003016","NAME10":"Block 3016","MTFCC10":"G5040","UR10":"U","UACE10":"78904","UATYP10":"U","FUNCSTAT10":"S","ALAND10":253.000000,"AWATER10":0.000000,"INTPTLAT10":"+37.887776","INTPTLON10":"-122.292289"},"geometry":{"type":"Polygon","coordinates":[[[-122.292473,37.887775],[-122.292129,37.887848],[-122.292106,37.887778],[-122.292174,37.887763],[-122.292381,37.887719],[-122.29245,37.887705],[-122.292473,37.887775]]]}}
{"type":"Feature","properties":{"STATEFP10":"06","COUNTYFP10":"001","TRACTCE10":"420600","BLOCKCE10":"3017","GEOID10":"060014206003017","NAME10":"Block 3017","MTFCC10":"G5040","UR10":"U","UACE10":"78904","UATYP10":"U","FUNCSTAT10":"S","ALAND10":6343.000000,"AWATER10":0.000000,"INTPTLAT10":"+37.884079","INTPTLON10":"-122.290980","population":12},"geometry":{"type":"Polygon","coordinates":[[[-122.29117,37.884974],[-122.291107,37.884764],[-122.290933,37.884357],[-122.290817,37.88414],[-122.290383,37.883205],[-122.290831,37.883311],[-122.291152,37.883996],[-122.291358,37.884474],[-122.291516,37.884897],[-122.29117,37.884974]]]}}
{"type":"Feature","properties":{"STATEFP10":"06","COUNTYFP10":"001","TRACTCE10":"420600","BLOCKCE10":"3018","GEOID10":"060014206003018","NAME10":"Block 3018","MTFCC10":"G5040","UR10":"U","UACE10":"78904","UATYP10":"U","FUNCSTAT10":"S","ALAND10":14557.000000,"AWATER10":0.000000,"INTPTLAT10":"+37.884369","INTPTLON10":"-122.290441","population":32},"geometry":{"type":"Polygon","coordinates":[[[-122.290383,37.883205],[-122.290817,37.88414],[-122.290933,37.884357],[-122.291107,37.884764],[-122.29117,37.884974],[-122.290166,37.885213],[-122.290031,37.884888],[-122.289845,37.884492],[-122.290151,37.883572],[-122.290231,37.883308],[-122.29028,37.883025],[-122.290283,37.883037],[-122.290316,37.883189],[-122.290383,37.883205]]]}}
{"type":"Feature","properties":{"STATEFP10":"06","COUNTYFP10":"001","TRACTCE10":"420600","BLOCKCE10":"3018","GEOID10":"060014206003018","NAME10":"Block 3018","MTFCC10":"G5040","UR10":"U","UACE10":"78904","UATYP10":"U","FUNCSTAT10":"S","ALAND10":14557.000000,"AWATER10":0.000000,"INTPTLAT10":"+37.884369","INTPTLON10":"-122.290441","population":""},"geometry":{"type":"Polygon","coordinates":[[[-122.290383,37.883205],[-122.290817,37.88414],[-122.290933,37.884357],[-122.291107,37.884764],[-122.29117,37.884974],[-122.290166,37.885213],[-122.290031,37.884888],[-122.289845,37.884492],[-122.290151,37.883572],[-122.290231,37.883308],[-122.29028,37.883025],[-122.290283,37.883037],[-122.290316,37.883189],[-122.290383,37.883205]]]}}

View File

@ -0,0 +1,502 @@
{ "type": "FeatureCollection", "properties": {
"bounds": "-175.220564,-41.299973,179.216647,64.150023",
"center": "0.000000,0.000000,0",
"description": "tests/layer-json/out.mbtiles",
"format": "pbf",
"json": "{\"vector_layers\": [ { \"id\": \"places\", \"description\": \"World cities\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"NAME\": \"String\"} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"places\",\"count\": 243,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"NAME\",\"count\": 243,\"type\": \"string\",\"values\": [\"Abidjan\",\"Abu Dhabi\",\"Abuja\",\"Accra\",\"Addis Ababa\",\"Algiers\",\"Amman\",\"Amsterdam\",\"Andorra\",\"Ankara\",\"Antananarivo\",\"Apia\",\"Ashgabat\",\"Asmara\",\"Astana\",\"Asuncion\",\"Athens\",\"Atlanta\",\"Auckland\",\"Baghdad\",\"Baguio City\",\"Baku\",\"Bamako\",\"Bandar Seri Begawan\",\"Bangalore\",\"Bangkok\",\"Bangui\",\"Banjul\",\"Basseterre\",\"Beijing\",\"Beirut\",\"Belgrade\",\"Belmopan\",\"Berlin\",\"Bern\",\"Bir Lehlou\",\"Bishkek\",\"Bissau\",\"Bloemfontein\",\"Bogota\",\"Brasilia\",\"Bratislava\",\"Brazzaville\",\"Bridgetown\",\"Brussels\",\"Bucharest\",\"Budapest\",\"Buenos Aires\",\"Bujumbura\",\"Cairo\",\"Canberra\",\"Cape Town\",\"Caracas\",\"Casablanca\",\"Castries\",\"Chengdu\",\"Chicago\",\"Chisinau\",\"Colombo\",\"Conakry\",\"Cotonou\",\"Dakar\",\"Damascus\",\"Dar es Salaam\",\"Denver\",\"Dhaka\",\"Dili\",\"Djibouti\",\"Dodoma\",\"Doha\",\"Dubai\",\"Dublin\",\"Dushanbe\",\"Freetown\",\"Funafuti\",\"Gaborone\",\"Geneva\",\"Georgetown\",\"Guatemala\",\"Hanoi\",\"Harare\",\"Hargeysa\",\"Havana\",\"Helsinki\",\"Hong Kong\",\"Honiara\",\"Houston\",\"Islamabad\",\"Istanbul\",\"Jakarta\",\"Jerusalem\",\"Johannesburg\",\"Juba\",\"Kabul\",\"Kampala\",\"Kathmandu\",\"Khartoum\",\"Kiev\",\"Kigali\",\"Kingston\"]}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/layer-json/out.mbtiles",
"type": "overlay",
"version": "2"
}, "features": [
{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [
{ "type": "FeatureCollection", "properties": { "layer": "places", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "NAME": "Vancouver" }, "geometry": { "type": "Point", "coordinates": [ -123.134766, 49.325122 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Francisco" }, "geometry": { "type": "Point", "coordinates": [ -122.431641, 37.788081 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Los Angeles" }, "geometry": { "type": "Point", "coordinates": [ -118.212891, 34.016242 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Denver" }, "geometry": { "type": "Point", "coordinates": [ -105.029297, 39.774769 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monterrey" }, "geometry": { "type": "Point", "coordinates": [ -100.371094, 25.720735 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Houston" }, "geometry": { "type": "Point", "coordinates": [ -95.361328, 29.840644 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mexico City" }, "geometry": { "type": "Point", "coordinates": [ -99.140625, 19.476950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Guatemala" }, "geometry": { "type": "Point", "coordinates": [ -90.615234, 14.689881 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chicago" }, "geometry": { "type": "Point", "coordinates": [ -87.802734, 41.836828 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Toronto" }, "geometry": { "type": "Point", "coordinates": [ -79.453125, 43.707594 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ottawa" }, "geometry": { "type": "Point", "coordinates": [ -75.761719, 45.460131 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Atlanta" }, "geometry": { "type": "Point", "coordinates": [ -84.462891, 33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Havana" }, "geometry": { "type": "Point", "coordinates": [ -82.441406, 23.160563 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Miami" }, "geometry": { "type": "Point", "coordinates": [ -80.244141, 25.799891 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Washington, D.C." }, "geometry": { "type": "Point", "coordinates": [ -77.080078, 38.959409 ] } }
,
{ "type": "Feature", "properties": { "NAME": "New York" }, "geometry": { "type": "Point", "coordinates": [ -74.003906, 40.780541 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nassau" }, "geometry": { "type": "Point", "coordinates": [ -77.431641, 25.085599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Belmopan" }, "geometry": { "type": "Point", "coordinates": [ -88.769531, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tegucigalpa" }, "geometry": { "type": "Point", "coordinates": [ -87.275391, 14.179186 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Salvador" }, "geometry": { "type": "Point", "coordinates": [ -89.208984, 13.752725 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Managua" }, "geometry": { "type": "Point", "coordinates": [ -86.308594, 12.211180 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Jose" }, "geometry": { "type": "Point", "coordinates": [ -84.111328, 9.968851 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Panama City" }, "geometry": { "type": "Point", "coordinates": [ -79.541016, 9.015302 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kingston" }, "geometry": { "type": "Point", "coordinates": [ -76.816406, 17.978733 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port-au-Prince" }, "geometry": { "type": "Point", "coordinates": [ -72.421875, 18.562947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Santo Domingo" }, "geometry": { "type": "Point", "coordinates": [ -69.960938, 18.479609 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bogota" }, "geometry": { "type": "Point", "coordinates": [ -74.091797, 4.653080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Basseterre" }, "geometry": { "type": "Point", "coordinates": [ -62.753906, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Saint John's" }, "geometry": { "type": "Point", "coordinates": [ -61.875000, 17.140790 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Roseau" }, "geometry": { "type": "Point", "coordinates": [ -61.435547, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Castries" }, "geometry": { "type": "Point", "coordinates": [ -61.083984, 14.008696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kingstown" }, "geometry": { "type": "Point", "coordinates": [ -61.259766, 13.154376 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Saint George's" }, "geometry": { "type": "Point", "coordinates": [ -61.787109, 12.125264 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bridgetown" }, "geometry": { "type": "Point", "coordinates": [ -59.677734, 13.154376 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Caracas" }, "geometry": { "type": "Point", "coordinates": [ -66.972656, 10.574222 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port-of-Spain" }, "geometry": { "type": "Point", "coordinates": [ -61.523438, 10.660608 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Georgetown" }, "geometry": { "type": "Point", "coordinates": [ -58.183594, 6.839170 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Paramaribo" }, "geometry": { "type": "Point", "coordinates": [ -55.195312, 5.878332 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Reykjavík" }, "geometry": { "type": "Point", "coordinates": [ -21.972656, 64.168107 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dublin" }, "geometry": { "type": "Point", "coordinates": [ -6.328125, 53.383328 ] } }
,
{ "type": "Feature", "properties": { "NAME": "London" }, "geometry": { "type": "Point", "coordinates": [ -0.175781, 51.508742 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Praia" }, "geometry": { "type": "Point", "coordinates": [ -23.554688, 14.944785 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Laayoune" }, "geometry": { "type": "Point", "coordinates": [ -13.271484, 27.215556 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lisbon" }, "geometry": { "type": "Point", "coordinates": [ -9.228516, 38.754083 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Casablanca" }, "geometry": { "type": "Point", "coordinates": [ -7.646484, 33.651208 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rabat" }, "geometry": { "type": "Point", "coordinates": [ -6.855469, 34.089061 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Madrid" }, "geometry": { "type": "Point", "coordinates": [ -3.691406, 40.446947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bir Lehlou" }, "geometry": { "type": "Point", "coordinates": [ -9.667969, 26.194877 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dakar" }, "geometry": { "type": "Point", "coordinates": [ -17.490234, 14.774883 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nouakchott" }, "geometry": { "type": "Point", "coordinates": [ -15.996094, 18.145852 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Banjul" }, "geometry": { "type": "Point", "coordinates": [ -16.611328, 13.496473 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bissau" }, "geometry": { "type": "Point", "coordinates": [ -15.644531, 11.867351 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Conakry" }, "geometry": { "type": "Point", "coordinates": [ -13.710938, 9.535749 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Freetown" }, "geometry": { "type": "Point", "coordinates": [ -13.271484, 8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bamako" }, "geometry": { "type": "Point", "coordinates": [ -8.085938, 12.726084 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ouagadougou" }, "geometry": { "type": "Point", "coordinates": [ -1.582031, 12.382928 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monrovia" }, "geometry": { "type": "Point", "coordinates": [ -10.810547, 6.315299 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yamoussoukro" }, "geometry": { "type": "Point", "coordinates": [ -5.361328, 6.839170 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abidjan" }, "geometry": { "type": "Point", "coordinates": [ -4.042969, 5.353521 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Accra" }, "geometry": { "type": "Point", "coordinates": [ -0.263672, 5.615986 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nukualofa" }, "geometry": { "type": "Point", "coordinates": [ -175.253906, -21.125498 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Apia" }, "geometry": { "type": "Point", "coordinates": [ -171.826172, -13.838080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Quito" }, "geometry": { "type": "Point", "coordinates": [ -78.574219, -0.175781 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lima" }, "geometry": { "type": "Point", "coordinates": [ -77.080078, -12.039321 ] } }
,
{ "type": "Feature", "properties": { "NAME": "La Paz" }, "geometry": { "type": "Point", "coordinates": [ -68.203125, -16.467695 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Valparaiso" }, "geometry": { "type": "Point", "coordinates": [ -71.630859, -32.990236 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Santiago" }, "geometry": { "type": "Point", "coordinates": [ -70.751953, -33.431441 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sucre" }, "geometry": { "type": "Point", "coordinates": [ -65.302734, -18.979026 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brasilia" }, "geometry": { "type": "Point", "coordinates": [ -47.988281, -15.707663 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Asuncion" }, "geometry": { "type": "Point", "coordinates": [ -57.656250, -25.244696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Buenos Aires" }, "geometry": { "type": "Point", "coordinates": [ -58.447266, -34.597042 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sao Paulo" }, "geometry": { "type": "Point", "coordinates": [ -46.669922, -23.483401 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Montevideo" }, "geometry": { "type": "Point", "coordinates": [ -56.250000, -34.813803 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rio de Janeiro" }, "geometry": { "type": "Point", "coordinates": [ -43.242188, -22.917923 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Oslo" }, "geometry": { "type": "Point", "coordinates": [ 10.722656, 59.933000 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Stockholm" }, "geometry": { "type": "Point", "coordinates": [ 18.017578, 59.355596 ] } }
,
{ "type": "Feature", "properties": { "NAME": "The Hague" }, "geometry": { "type": "Point", "coordinates": [ 4.218750, 52.106505 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Amsterdam" }, "geometry": { "type": "Point", "coordinates": [ 4.833984, 52.375599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brussels" }, "geometry": { "type": "Point", "coordinates": [ 4.306641, 50.847573 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Luxembourg" }, "geometry": { "type": "Point", "coordinates": [ 6.064453, 49.667628 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Paris" }, "geometry": { "type": "Point", "coordinates": [ 2.285156, 48.922499 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Andorra" }, "geometry": { "type": "Point", "coordinates": [ 1.494141, 42.553080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Geneva" }, "geometry": { "type": "Point", "coordinates": [ 6.064453, 46.255847 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bern" }, "geometry": { "type": "Point", "coordinates": [ 7.382812, 46.920255 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vaduz" }, "geometry": { "type": "Point", "coordinates": [ 9.492188, 47.159840 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monaco" }, "geometry": { "type": "Point", "coordinates": [ 7.382812, 43.771094 ] } }
,
{ "type": "Feature", "properties": { "NAME": "København" }, "geometry": { "type": "Point", "coordinates": [ 12.480469, 55.727110 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Berlin" }, "geometry": { "type": "Point", "coordinates": [ 13.359375, 52.536273 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Prague" }, "geometry": { "type": "Point", "coordinates": [ 14.414062, 50.120578 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Warsaw" }, "geometry": { "type": "Point", "coordinates": [ 20.917969, 52.268157 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vienna" }, "geometry": { "type": "Point", "coordinates": [ 16.347656, 48.224673 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ljubljana" }, "geometry": { "type": "Point", "coordinates": [ 14.501953, 46.073231 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Zagreb" }, "geometry": { "type": "Point", "coordinates": [ 15.996094, 45.828799 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Marino" }, "geometry": { "type": "Point", "coordinates": [ 12.392578, 43.961191 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vatican City" }, "geometry": { "type": "Point", "coordinates": [ 12.392578, 41.967659 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rome" }, "geometry": { "type": "Point", "coordinates": [ 12.480469, 41.902277 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bratislava" }, "geometry": { "type": "Point", "coordinates": [ 17.050781, 48.166085 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Budapest" }, "geometry": { "type": "Point", "coordinates": [ 19.072266, 47.517201 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sarajevo" }, "geometry": { "type": "Point", "coordinates": [ 18.369141, 43.897892 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Podgorica" }, "geometry": { "type": "Point", "coordinates": [ 19.248047, 42.488302 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Belgrade" }, "geometry": { "type": "Point", "coordinates": [ 20.390625, 44.840291 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tirana" }, "geometry": { "type": "Point", "coordinates": [ 19.775391, 41.376809 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pristina" }, "geometry": { "type": "Point", "coordinates": [ 21.093750, 42.682435 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Skopje" }, "geometry": { "type": "Point", "coordinates": [ 21.357422, 42.032974 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Helsinki" }, "geometry": { "type": "Point", "coordinates": [ 24.873047, 60.196156 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tallinn" }, "geometry": { "type": "Point", "coordinates": [ 24.697266, 59.445075 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Riga" }, "geometry": { "type": "Point", "coordinates": [ 24.082031, 56.992883 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vilnius" }, "geometry": { "type": "Point", "coordinates": [ 25.312500, 54.724620 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Minsk" }, "geometry": { "type": "Point", "coordinates": [ 27.509766, 53.904338 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kiev" }, "geometry": { "type": "Point", "coordinates": [ 30.498047, 50.457504 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sofia" }, "geometry": { "type": "Point", "coordinates": [ 23.291016, 42.747012 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bucharest" }, "geometry": { "type": "Point", "coordinates": [ 26.015625, 44.465151 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chisinau" }, "geometry": { "type": "Point", "coordinates": [ 28.828125, 47.040182 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Istanbul" }, "geometry": { "type": "Point", "coordinates": [ 29.003906, 41.112469 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Moscow" }, "geometry": { "type": "Point", "coordinates": [ 37.529297, 55.776573 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tbilisi" }, "geometry": { "type": "Point", "coordinates": [ 44.736328, 41.771312 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Algiers" }, "geometry": { "type": "Point", "coordinates": [ 2.988281, 36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tunis" }, "geometry": { "type": "Point", "coordinates": [ 10.107422, 36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tripoli" }, "geometry": { "type": "Point", "coordinates": [ 13.095703, 32.916485 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Valletta" }, "geometry": { "type": "Point", "coordinates": [ 14.501953, 35.960223 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Niamey" }, "geometry": { "type": "Point", "coordinates": [ 2.109375, 13.581921 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lome" }, "geometry": { "type": "Point", "coordinates": [ 1.142578, 6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cotonou" }, "geometry": { "type": "Point", "coordinates": [ 2.460938, 6.402648 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Porto-Novo" }, "geometry": { "type": "Point", "coordinates": [ 2.548828, 6.489983 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lagos" }, "geometry": { "type": "Point", "coordinates": [ 3.339844, 6.489983 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abuja" }, "geometry": { "type": "Point", "coordinates": [ 7.470703, 9.102097 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sao Tome" }, "geometry": { "type": "Point", "coordinates": [ 6.679688, 0.351560 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Malabo" }, "geometry": { "type": "Point", "coordinates": [ 8.701172, 3.776559 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Libreville" }, "geometry": { "type": "Point", "coordinates": [ 9.404297, 0.439449 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ndjamena" }, "geometry": { "type": "Point", "coordinates": [ 15.029297, 12.125264 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yaounde" }, "geometry": { "type": "Point", "coordinates": [ 11.513672, 3.951941 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangui" }, "geometry": { "type": "Point", "coordinates": [ 18.544922, 4.390229 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Athens" }, "geometry": { "type": "Point", "coordinates": [ 23.730469, 37.996163 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ankara" }, "geometry": { "type": "Point", "coordinates": [ 32.783203, 39.977120 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nicosia" }, "geometry": { "type": "Point", "coordinates": [ 33.310547, 35.173808 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cairo" }, "geometry": { "type": "Point", "coordinates": [ 31.201172, 30.069094 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tel Aviv-Yafo" }, "geometry": { "type": "Point", "coordinates": [ 34.716797, 32.101190 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Beirut" }, "geometry": { "type": "Point", "coordinates": [ 35.419922, 33.943360 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Damascus" }, "geometry": { "type": "Point", "coordinates": [ 36.210938, 33.504759 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yerevan" }, "geometry": { "type": "Point", "coordinates": [ 44.472656, 40.245992 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baghdad" }, "geometry": { "type": "Point", "coordinates": [ 44.384766, 33.358062 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Jerusalem" }, "geometry": { "type": "Point", "coordinates": [ 35.156250, 31.802893 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Amman" }, "geometry": { "type": "Point", "coordinates": [ 35.859375, 31.952162 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Khartoum" }, "geometry": { "type": "Point", "coordinates": [ 32.519531, 15.623037 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Juba" }, "geometry": { "type": "Point", "coordinates": [ 31.552734, 4.915833 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kampala" }, "geometry": { "type": "Point", "coordinates": [ 32.519531, 0.351560 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Asmara" }, "geometry": { "type": "Point", "coordinates": [ 38.847656, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sanaa" }, "geometry": { "type": "Point", "coordinates": [ 44.121094, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Djibouti" }, "geometry": { "type": "Point", "coordinates": [ 43.066406, 11.609193 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Addis Ababa" }, "geometry": { "type": "Point", "coordinates": [ 38.671875, 9.102097 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hargeysa" }, "geometry": { "type": "Point", "coordinates": [ 44.033203, 9.622414 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Astana" }, "geometry": { "type": "Point", "coordinates": [ 71.367188, 51.234407 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tashkent" }, "geometry": { "type": "Point", "coordinates": [ 69.257812, 41.376809 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bishkek" }, "geometry": { "type": "Point", "coordinates": [ 74.531250, 42.875964 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Urumqi" }, "geometry": { "type": "Point", "coordinates": [ 87.539062, 43.834527 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baku" }, "geometry": { "type": "Point", "coordinates": [ 49.833984, 40.446947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tehran" }, "geometry": { "type": "Point", "coordinates": [ 51.416016, 35.675147 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kuwait" }, "geometry": { "type": "Point", "coordinates": [ 47.900391, 29.382175 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Riyadh" }, "geometry": { "type": "Point", "coordinates": [ 46.757812, 24.686952 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Manama" }, "geometry": { "type": "Point", "coordinates": [ 50.537109, 26.273714 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Doha" }, "geometry": { "type": "Point", "coordinates": [ 51.503906, 25.324167 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dubai" }, "geometry": { "type": "Point", "coordinates": [ 55.195312, 25.244696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abu Dhabi" }, "geometry": { "type": "Point", "coordinates": [ 54.316406, 24.527135 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ashgabat" }, "geometry": { "type": "Point", "coordinates": [ 58.359375, 37.996163 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Muscat" }, "geometry": { "type": "Point", "coordinates": [ 58.535156, 23.644524 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mogadishu" }, "geometry": { "type": "Point", "coordinates": [ 45.351562, 2.108899 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dushanbe" }, "geometry": { "type": "Point", "coordinates": [ 68.730469, 38.616870 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kabul" }, "geometry": { "type": "Point", "coordinates": [ 69.169922, 34.524661 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Islamabad" }, "geometry": { "type": "Point", "coordinates": [ 73.125000, 33.724340 ] } }
,
{ "type": "Feature", "properties": { "NAME": "New Delhi" }, "geometry": { "type": "Point", "coordinates": [ 77.167969, 28.613459 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kathmandu" }, "geometry": { "type": "Point", "coordinates": [ 85.253906, 27.761330 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Thimphu" }, "geometry": { "type": "Point", "coordinates": [ 89.560547, 27.527758 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kolkata" }, "geometry": { "type": "Point", "coordinates": [ 88.242188, 22.512557 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mumbai" }, "geometry": { "type": "Point", "coordinates": [ 72.773438, 19.062118 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangalore" }, "geometry": { "type": "Point", "coordinates": [ 77.519531, 12.983148 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Male" }, "geometry": { "type": "Point", "coordinates": [ 73.476562, 4.214943 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Colombo" }, "geometry": { "type": "Point", "coordinates": [ 79.804688, 7.013668 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sri Jawewardenepura Kotte" }, "geometry": { "type": "Point", "coordinates": [ 79.892578, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ulaanbaatar" }, "geometry": { "type": "Point", "coordinates": [ 106.875000, 47.931066 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dhaka" }, "geometry": { "type": "Point", "coordinates": [ 90.351562, 23.725012 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chengdu" }, "geometry": { "type": "Point", "coordinates": [ 104.062500, 30.675715 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Naypyidaw" }, "geometry": { "type": "Point", "coordinates": [ 96.064453, 19.808054 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rangoon" }, "geometry": { "type": "Point", "coordinates": [ 96.152344, 16.804541 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangkok" }, "geometry": { "type": "Point", "coordinates": [ 100.458984, 13.752725 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vientiane" }, "geometry": { "type": "Point", "coordinates": [ 102.568359, 17.978733 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hanoi" }, "geometry": { "type": "Point", "coordinates": [ 105.820312, 21.043491 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Phnom Penh" }, "geometry": { "type": "Point", "coordinates": [ 104.853516, 11.609193 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kuala Lumpur" }, "geometry": { "type": "Point", "coordinates": [ 101.689453, 3.250209 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Putrajaya" }, "geometry": { "type": "Point", "coordinates": [ 101.689453, 2.986927 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Singapore" }, "geometry": { "type": "Point", "coordinates": [ 103.798828, 1.318243 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Beijing" }, "geometry": { "type": "Point", "coordinates": [ 116.367188, 39.977120 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hong Kong" }, "geometry": { "type": "Point", "coordinates": [ 114.169922, 22.350076 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Shanghai" }, "geometry": { "type": "Point", "coordinates": [ 121.376953, 31.278551 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Taipei" }, "geometry": { "type": "Point", "coordinates": [ 121.552734, 25.085599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pyongyang" }, "geometry": { "type": "Point", "coordinates": [ 125.683594, 39.027719 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Seoul" }, "geometry": { "type": "Point", "coordinates": [ 126.914062, 37.579413 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baguio City" }, "geometry": { "type": "Point", "coordinates": [ 120.498047, 16.467695 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Manila" }, "geometry": { "type": "Point", "coordinates": [ 120.937500, 14.689881 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bandar Seri Begawan" }, "geometry": { "type": "Point", "coordinates": [ 114.873047, 4.915833 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Melekeok" }, "geometry": { "type": "Point", "coordinates": [ 134.560547, 7.536764 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Osaka" }, "geometry": { "type": "Point", "coordinates": [ 135.439453, 34.813803 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kyoto" }, "geometry": { "type": "Point", "coordinates": [ 135.703125, 35.101934 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tokyo" }, "geometry": { "type": "Point", "coordinates": [ 139.746094, 35.746512 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Palikir" }, "geometry": { "type": "Point", "coordinates": [ 158.115234, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Majuro" }, "geometry": { "type": "Point", "coordinates": [ 171.298828, 7.188101 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tarawa" }, "geometry": { "type": "Point", "coordinates": [ 172.968750, 1.406109 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brazzaville" }, "geometry": { "type": "Point", "coordinates": [ 15.205078, -4.214943 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kinshasa" }, "geometry": { "type": "Point", "coordinates": [ 15.292969, -4.302591 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Luanda" }, "geometry": { "type": "Point", "coordinates": [ 13.183594, -8.754795 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Windhoek" }, "geometry": { "type": "Point", "coordinates": [ 17.050781, -22.512557 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cape Town" }, "geometry": { "type": "Point", "coordinates": [ 18.369141, -33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kigali" }, "geometry": { "type": "Point", "coordinates": [ 29.970703, -1.933227 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bujumbura" }, "geometry": { "type": "Point", "coordinates": [ 29.355469, -3.337954 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lusaka" }, "geometry": { "type": "Point", "coordinates": [ 28.212891, -15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Harare" }, "geometry": { "type": "Point", "coordinates": [ 31.025391, -17.811456 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nairobi" }, "geometry": { "type": "Point", "coordinates": [ 36.738281, -1.230374 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dodoma" }, "geometry": { "type": "Point", "coordinates": [ 35.683594, -6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dar es Salaam" }, "geometry": { "type": "Point", "coordinates": [ 39.199219, -6.751896 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lilongwe" }, "geometry": { "type": "Point", "coordinates": [ 33.750000, -13.923404 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Moroni" }, "geometry": { "type": "Point", "coordinates": [ 43.154297, -11.695273 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Gaborone" }, "geometry": { "type": "Point", "coordinates": [ 25.839844, -24.607069 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Johannesburg" }, "geometry": { "type": "Point", "coordinates": [ 27.949219, -26.115986 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bloemfontein" }, "geometry": { "type": "Point", "coordinates": [ 26.191406, -29.075375 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Maseru" }, "geometry": { "type": "Point", "coordinates": [ 27.421875, -29.305561 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pretoria" }, "geometry": { "type": "Point", "coordinates": [ 28.212891, -25.641526 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mbabane" }, "geometry": { "type": "Point", "coordinates": [ 31.113281, -26.273714 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lobamba" }, "geometry": { "type": "Point", "coordinates": [ 31.113281, -26.431228 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Maputo" }, "geometry": { "type": "Point", "coordinates": [ 32.519531, -25.878994 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Victoria" }, "geometry": { "type": "Point", "coordinates": [ 55.371094, -4.565474 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Antananarivo" }, "geometry": { "type": "Point", "coordinates": [ 47.460938, -18.895893 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Louis" }, "geometry": { "type": "Point", "coordinates": [ 57.480469, -20.138470 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Jakarta" }, "geometry": { "type": "Point", "coordinates": [ 106.787109, -6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dili" }, "geometry": { "type": "Point", "coordinates": [ 125.507812, -8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Moresby" }, "geometry": { "type": "Point", "coordinates": [ 147.128906, -9.449062 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Melbourne" }, "geometry": { "type": "Point", "coordinates": [ 144.931641, -37.788081 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sydney" }, "geometry": { "type": "Point", "coordinates": [ 151.171875, -33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Canberra" }, "geometry": { "type": "Point", "coordinates": [ 149.062500, -35.245619 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Honiara" }, "geometry": { "type": "Point", "coordinates": [ 159.873047, -9.362353 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Vila" }, "geometry": { "type": "Point", "coordinates": [ 168.310547, -17.727759 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Funafuti" }, "geometry": { "type": "Point", "coordinates": [ 179.208984, -8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Suva" }, "geometry": { "type": "Point", "coordinates": [ 178.417969, -18.062312 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Auckland" }, "geometry": { "type": "Point", "coordinates": [ 174.726562, -36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Wellington" }, "geometry": { "type": "Point", "coordinates": [ 174.726562, -41.244772 ] } }
] }
] }
] }

View File

@ -0,0 +1,502 @@
{ "type": "FeatureCollection", "properties": {
"bounds": "-175.220564,-41.299973,179.216647,64.150023",
"center": "0.000000,0.000000,0",
"description": "tests/ne_110m_populated_places/out/-z0_-r1_-yNAME_-ySOV0NAME_-yELEVATION_-YNAME@City_-YSOV0NAME@Country.json.check.mbtiles",
"format": "pbf",
"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"ELEVATION\": \"Number\", \"NAME\": \"City\", \"SOV0NAME\": \"Country\"} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"in\",\"count\": 243,\"geometry\": \"Point\",\"attributeCount\": 3,\"attributes\": [{\"attribute\": \"ELEVATION\",\"count\": 19,\"type\": \"number\",\"values\": [0,10,1317,16,171,179,187,2,2320,284,308,320,5,7,70,74,850,89,920],\"min\": 0,\"max\": 2320},{\"attribute\": \"NAME\",\"count\": 243,\"type\": \"string\",\"values\": [\"Abidjan\",\"Abu Dhabi\",\"Abuja\",\"Accra\",\"Addis Ababa\",\"Algiers\",\"Amman\",\"Amsterdam\",\"Andorra\",\"Ankara\",\"Antananarivo\",\"Apia\",\"Ashgabat\",\"Asmara\",\"Astana\",\"Asuncion\",\"Athens\",\"Atlanta\",\"Auckland\",\"Baghdad\",\"Baguio City\",\"Baku\",\"Bamako\",\"Bandar Seri Begawan\",\"Bangalore\",\"Bangkok\",\"Bangui\",\"Banjul\",\"Basseterre\",\"Beijing\",\"Beirut\",\"Belgrade\",\"Belmopan\",\"Berlin\",\"Bern\",\"Bir Lehlou\",\"Bishkek\",\"Bissau\",\"Bloemfontein\",\"Bogota\",\"Brasilia\",\"Bratislava\",\"Brazzaville\",\"Bridgetown\",\"Brussels\",\"Bucharest\",\"Budapest\",\"Buenos Aires\",\"Bujumbura\",\"Cairo\",\"Canberra\",\"Cape Town\",\"Caracas\",\"Casablanca\",\"Castries\",\"Chengdu\",\"Chicago\",\"Chisinau\",\"Colombo\",\"Conakry\",\"Cotonou\",\"Dakar\",\"Damascus\",\"Dar es Salaam\",\"Denver\",\"Dhaka\",\"Dili\",\"Djibouti\",\"Dodoma\",\"Doha\",\"Dubai\",\"Dublin\",\"Dushanbe\",\"Freetown\",\"Funafuti\",\"Gaborone\",\"Geneva\",\"Georgetown\",\"Guatemala\",\"Hanoi\",\"Harare\",\"Hargeysa\",\"Havana\",\"Helsinki\",\"Hong Kong\",\"Honiara\",\"Houston\",\"Islamabad\",\"Istanbul\",\"Jakarta\",\"Jerusalem\",\"Johannesburg\",\"Juba\",\"Kabul\",\"Kampala\",\"Kathmandu\",\"Khartoum\",\"Kiev\",\"Kigali\",\"Kingston\"]},{\"attribute\": \"SOV0NAME\",\"count\": 197,\"type\": \"string\",\"values\": [\"Afghanistan\",\"Albania\",\"Algeria\",\"Andorra\",\"Angola\",\"Antigua and Barbuda\",\"Argentina\",\"Armenia\",\"Australia\",\"Austria\",\"Azerbaijan\",\"Bahamas, The\",\"Bahrain\",\"Bangladesh\",\"Barbados\",\"Belarus\",\"Belgium\",\"Belize\",\"Benin\",\"Bhutan\",\"Bolivia\",\"Bosnia and Herzegovina\",\"Botswana\",\"Brazil\",\"Brunei\",\"Bulgaria\",\"Burkina Faso\",\"Burundi\",\"Cambodia\",\"Cameroon\",\"Canada\",\"Cape Verde\",\"Central African Republic\",\"Chad\",\"Chile\",\"China\",\"Colombia\",\"Comoros\",\"Congo (Brazzaville)\",\"Congo (Kinshasa)\",\"Costa Rica\",\"Croatia\",\"Cuba\",\"Cyprus\",\"Czech Republic\",\"Denmark\",\"Djibouti\",\"Dominica\",\"Dominican Republic\",\"East Timor\",\"Ecuador\",\"Egypt\",\"El Salvador\",\"Equatorial Guinea\",\"Eritrea\",\"Estonia\",\"Ethiopia\",\"Federated States of Micronesia\",\"Fiji\",\"Finland\",\"French Republic\",\"Gabon\",\"Gambia, The\",\"Georgia\",\"Germany\",\"Ghana\",\"Greece\",\"Grenada\",\"Guatemala\",\"Guinea\",\"Guinea Bissau\",\"Guyana\",\"Haiti\",\"Honduras\",\"Hungary\",\"Iceland\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Ireland\",\"Israel\",\"Italy\",\"Ivory Coast\",\"Jamaica\",\"Japan\",\"Jordan\",\"Kazakhstan\",\"Kenya\",\"Kingdom of Norway\",\"Kingdom of Spain\",\"Kingdom of the Netherlands\",\"Kiribati\",\"Korea, North\",\"Korea, South\",\"Kosovo\",\"Kuwait\",\"Kyrgyzstan\",\"Laos\",\"Latvia\"]}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z0_-r1_-yNAME_-ySOV0NAME_-yELEVATION_-YNAME@City_-YSOV0NAME@Country.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": { "NAME": "Vancouver", "SOV0NAME": "Canada", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.134766, 49.325122 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Francisco", "SOV0NAME": "United States", "ELEVATION": 16 }, "geometry": { "type": "Point", "coordinates": [ -122.431641, 37.788081 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Los Angeles", "SOV0NAME": "United States", "ELEVATION": 89 }, "geometry": { "type": "Point", "coordinates": [ -118.212891, 34.016242 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Denver", "SOV0NAME": "United States", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -105.029297, 39.774769 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monterrey", "SOV0NAME": "Mexico", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -100.371094, 25.720735 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Houston", "SOV0NAME": "United States", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.361328, 29.840644 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mexico City", "SOV0NAME": "Mexico", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -99.140625, 19.476950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Guatemala", "SOV0NAME": "Guatemala", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.615234, 14.689881 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chicago", "SOV0NAME": "United States", "ELEVATION": 179 }, "geometry": { "type": "Point", "coordinates": [ -87.802734, 41.836828 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Toronto", "SOV0NAME": "Canada", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -79.453125, 43.707594 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ottawa", "SOV0NAME": "Canada", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -75.761719, 45.460131 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Atlanta", "SOV0NAME": "United States", "ELEVATION": 320 }, "geometry": { "type": "Point", "coordinates": [ -84.462891, 33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Havana", "SOV0NAME": "Cuba", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.441406, 23.160563 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Miami", "SOV0NAME": "United States", "ELEVATION": 2 }, "geometry": { "type": "Point", "coordinates": [ -80.244141, 25.799891 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Washington, D.C.", "SOV0NAME": "United States", "ELEVATION": 7 }, "geometry": { "type": "Point", "coordinates": [ -77.080078, 38.959409 ] } }
,
{ "type": "Feature", "properties": { "NAME": "New York", "SOV0NAME": "United States", "ELEVATION": 10 }, "geometry": { "type": "Point", "coordinates": [ -74.003906, 40.780541 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nassau", "SOV0NAME": "Bahamas, The", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.431641, 25.085599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Belmopan", "SOV0NAME": "Belize", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -88.769531, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tegucigalpa", "SOV0NAME": "Honduras", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.275391, 14.179186 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Salvador", "SOV0NAME": "El Salvador", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.208984, 13.752725 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Managua", "SOV0NAME": "Nicaragua", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -86.308594, 12.211180 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Jose", "SOV0NAME": "Costa Rica", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -84.111328, 9.968851 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Panama City", "SOV0NAME": "Panama", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -79.541016, 9.015302 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kingston", "SOV0NAME": "Jamaica", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -76.816406, 17.978733 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port-au-Prince", "SOV0NAME": "Haiti", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.421875, 18.562947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Santo Domingo", "SOV0NAME": "Dominican Republic", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.960938, 18.479609 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bogota", "SOV0NAME": "Colombia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.091797, 4.653080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Basseterre", "SOV0NAME": "Saint Kitts and Nevis", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -62.753906, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Saint John's", "SOV0NAME": "Antigua and Barbuda", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.875000, 17.140790 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Roseau", "SOV0NAME": "Dominica", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.435547, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Castries", "SOV0NAME": "Saint Lucia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.083984, 14.008696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kingstown", "SOV0NAME": "Saint Vincent and the Grenadines", "ELEVATION": 5 }, "geometry": { "type": "Point", "coordinates": [ -61.259766, 13.154376 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Saint George's", "SOV0NAME": "Grenada", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.787109, 12.125264 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bridgetown", "SOV0NAME": "Barbados", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -59.677734, 13.154376 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Caracas", "SOV0NAME": "Venezuela", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.972656, 10.574222 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port-of-Spain", "SOV0NAME": "Trinidad and Tobago", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.523438, 10.660608 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Georgetown", "SOV0NAME": "Guyana", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -58.183594, 6.839170 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Paramaribo", "SOV0NAME": "Suriname", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -55.195312, 5.878332 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Reykjavík", "SOV0NAME": "Iceland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -21.972656, 64.168107 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dublin", "SOV0NAME": "Ireland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -6.328125, 53.383328 ] } }
,
{ "type": "Feature", "properties": { "NAME": "London", "SOV0NAME": "United Kingdom", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -0.175781, 51.508742 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Praia", "SOV0NAME": "Cape Verde", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -23.554688, 14.944785 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Laayoune", "SOV0NAME": "Morocco", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.271484, 27.215556 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lisbon", "SOV0NAME": "Portugal", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -9.228516, 38.754083 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Casablanca", "SOV0NAME": "Morocco", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -7.646484, 33.651208 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rabat", "SOV0NAME": "Morocco", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -6.855469, 34.089061 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Madrid", "SOV0NAME": "Kingdom of Spain", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -3.691406, 40.446947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bir Lehlou", "SOV0NAME": "Western Sahara", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -9.667969, 26.194877 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dakar", "SOV0NAME": "Senegal", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -17.490234, 14.774883 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nouakchott", "SOV0NAME": "Mauritania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -15.996094, 18.145852 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Banjul", "SOV0NAME": "Gambia, The", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -16.611328, 13.496473 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bissau", "SOV0NAME": "Guinea Bissau", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -15.644531, 11.867351 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Conakry", "SOV0NAME": "Guinea", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.710938, 9.535749 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Freetown", "SOV0NAME": "Sierra Leone", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.271484, 8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bamako", "SOV0NAME": "Mali", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -8.085938, 12.726084 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ouagadougou", "SOV0NAME": "Burkina Faso", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -1.582031, 12.382928 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monrovia", "SOV0NAME": "Liberia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -10.810547, 6.315299 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yamoussoukro", "SOV0NAME": "Ivory Coast", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -5.361328, 6.839170 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abidjan", "SOV0NAME": "Ivory Coast", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -4.042969, 5.353521 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Accra", "SOV0NAME": "Ghana", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -0.263672, 5.615986 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nukualofa", "SOV0NAME": "Tonga", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.253906, -21.125498 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Apia", "SOV0NAME": "Samoa", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -171.826172, -13.838080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Quito", "SOV0NAME": "Ecuador", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -78.574219, -0.175781 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lima", "SOV0NAME": "Peru", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.080078, -12.039321 ] } }
,
{ "type": "Feature", "properties": { "NAME": "La Paz", "SOV0NAME": "Bolivia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.203125, -16.467695 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Valparaiso", "SOV0NAME": "Chile", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.630859, -32.990236 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Santiago", "SOV0NAME": "Chile", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.751953, -33.431441 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sucre", "SOV0NAME": "Bolivia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -65.302734, -18.979026 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brasilia", "SOV0NAME": "Brazil", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -47.988281, -15.707663 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Asuncion", "SOV0NAME": "Paraguay", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -57.656250, -25.244696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Buenos Aires", "SOV0NAME": "Argentina", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -58.447266, -34.597042 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sao Paulo", "SOV0NAME": "Brazil", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -46.669922, -23.483401 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Montevideo", "SOV0NAME": "Uruguay", "ELEVATION": 284 }, "geometry": { "type": "Point", "coordinates": [ -56.250000, -34.813803 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rio de Janeiro", "SOV0NAME": "Brazil", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ -43.242188, -22.917923 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Oslo", "SOV0NAME": "Kingdom of Norway", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 10.722656, 59.933000 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Stockholm", "SOV0NAME": "Sweden", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 18.017578, 59.355596 ] } }
,
{ "type": "Feature", "properties": { "NAME": "The Hague", "SOV0NAME": "Kingdom of the Netherlands", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 4.218750, 52.106505 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Amsterdam", "SOV0NAME": "Kingdom of the Netherlands", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 4.833984, 52.375599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brussels", "SOV0NAME": "Belgium", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 4.306641, 50.847573 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Luxembourg", "SOV0NAME": "Luxembourg", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 6.064453, 49.667628 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Paris", "SOV0NAME": "French Republic", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 2.285156, 48.922499 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Andorra", "SOV0NAME": "Andorra", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 1.494141, 42.553080 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Geneva", "SOV0NAME": "Switzerland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 6.064453, 46.255847 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bern", "SOV0NAME": "Switzerland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 7.382812, 46.920255 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vaduz", "SOV0NAME": "Liechtenstein", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 9.492188, 47.159840 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Monaco", "SOV0NAME": "Monaco", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 7.382812, 43.771094 ] } }
,
{ "type": "Feature", "properties": { "NAME": "København", "SOV0NAME": "Denmark", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 12.480469, 55.727110 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Berlin", "SOV0NAME": "Germany", "ELEVATION": 74 }, "geometry": { "type": "Point", "coordinates": [ 13.359375, 52.536273 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Prague", "SOV0NAME": "Czech Republic", "ELEVATION": 308 }, "geometry": { "type": "Point", "coordinates": [ 14.414062, 50.120578 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Warsaw", "SOV0NAME": "Poland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 20.917969, 52.268157 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vienna", "SOV0NAME": "Austria", "ELEVATION": 171 }, "geometry": { "type": "Point", "coordinates": [ 16.347656, 48.224673 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ljubljana", "SOV0NAME": "Slovenia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 14.501953, 46.073231 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Zagreb", "SOV0NAME": "Croatia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 15.996094, 45.828799 ] } }
,
{ "type": "Feature", "properties": { "NAME": "San Marino", "SOV0NAME": "San Marino", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 12.392578, 43.961191 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vatican City", "SOV0NAME": "Vatican (Holy Sea)", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 12.392578, 41.967659 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rome", "SOV0NAME": "Italy", "ELEVATION": 187 }, "geometry": { "type": "Point", "coordinates": [ 12.480469, 41.902277 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bratislava", "SOV0NAME": "Slovakia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 17.050781, 48.166085 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Budapest", "SOV0NAME": "Hungary", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 19.072266, 47.517201 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sarajevo", "SOV0NAME": "Bosnia and Herzegovina", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 18.369141, 43.897892 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Podgorica", "SOV0NAME": "Montenegro", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 19.248047, 42.488302 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Belgrade", "SOV0NAME": "Republic of Serbia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 20.390625, 44.840291 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tirana", "SOV0NAME": "Albania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 19.775391, 41.376809 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pristina", "SOV0NAME": "Kosovo", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 21.093750, 42.682435 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Skopje", "SOV0NAME": "Macedonia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 21.357422, 42.032974 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Helsinki", "SOV0NAME": "Finland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 24.873047, 60.196156 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tallinn", "SOV0NAME": "Estonia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 24.697266, 59.445075 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Riga", "SOV0NAME": "Latvia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 24.082031, 56.992883 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vilnius", "SOV0NAME": "Lithuania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.312500, 54.724620 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Minsk", "SOV0NAME": "Belarus", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 27.509766, 53.904338 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kiev", "SOV0NAME": "Ukraine", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 30.498047, 50.457504 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sofia", "SOV0NAME": "Bulgaria", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 23.291016, 42.747012 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bucharest", "SOV0NAME": "Romania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 26.015625, 44.465151 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chisinau", "SOV0NAME": "Moldova", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 28.828125, 47.040182 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Istanbul", "SOV0NAME": "Turkey", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 29.003906, 41.112469 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Moscow", "SOV0NAME": "Russia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 37.529297, 55.776573 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tbilisi", "SOV0NAME": "Georgia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 44.736328, 41.771312 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Algiers", "SOV0NAME": "Algeria", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 2.988281, 36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tunis", "SOV0NAME": "Tunisia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 10.107422, 36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tripoli", "SOV0NAME": "Libya", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 13.095703, 32.916485 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Valletta", "SOV0NAME": "Malta", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 14.501953, 35.960223 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Niamey", "SOV0NAME": "Niger", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 2.109375, 13.581921 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lome", "SOV0NAME": "Togo", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 1.142578, 6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cotonou", "SOV0NAME": "Benin", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 2.460938, 6.402648 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Porto-Novo", "SOV0NAME": "Benin", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 2.548828, 6.489983 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lagos", "SOV0NAME": "Nigeria", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 3.339844, 6.489983 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abuja", "SOV0NAME": "Nigeria", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 7.470703, 9.102097 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sao Tome", "SOV0NAME": "Sao Tome and Principe", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 6.679688, 0.351560 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Malabo", "SOV0NAME": "Equatorial Guinea", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 8.701172, 3.776559 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Libreville", "SOV0NAME": "Gabon", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 9.404297, 0.439449 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ndjamena", "SOV0NAME": "Chad", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 15.029297, 12.125264 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yaounde", "SOV0NAME": "Cameroon", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 11.513672, 3.951941 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangui", "SOV0NAME": "Central African Republic", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 18.544922, 4.390229 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Athens", "SOV0NAME": "Greece", "ELEVATION": 70 }, "geometry": { "type": "Point", "coordinates": [ 23.730469, 37.996163 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ankara", "SOV0NAME": "Turkey", "ELEVATION": 850 }, "geometry": { "type": "Point", "coordinates": [ 32.783203, 39.977120 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nicosia", "SOV0NAME": "Cyprus", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 33.310547, 35.173808 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cairo", "SOV0NAME": "Egypt", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.201172, 30.069094 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tel Aviv-Yafo", "SOV0NAME": "Israel", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 34.716797, 32.101190 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Beirut", "SOV0NAME": "Lebanon", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 35.419922, 33.943360 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Damascus", "SOV0NAME": "Syria", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 36.210938, 33.504759 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Yerevan", "SOV0NAME": "Armenia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 44.472656, 40.245992 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baghdad", "SOV0NAME": "Iraq", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 44.384766, 33.358062 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Jerusalem", "SOV0NAME": "Israel", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 35.156250, 31.802893 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Amman", "SOV0NAME": "Jordan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 35.859375, 31.952162 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Khartoum", "SOV0NAME": "Sudan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 32.519531, 15.623037 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Juba", "SOV0NAME": "South Sudan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.552734, 4.915833 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kampala", "SOV0NAME": "Uganda", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 32.519531, 0.351560 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Asmara", "SOV0NAME": "Eritrea", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 38.847656, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sanaa", "SOV0NAME": "Yemen", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 44.121094, 15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Djibouti", "SOV0NAME": "Djibouti", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 43.066406, 11.609193 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Addis Ababa", "SOV0NAME": "Ethiopia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 38.671875, 9.102097 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hargeysa", "SOV0NAME": "Somaliland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 44.033203, 9.622414 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Astana", "SOV0NAME": "Kazakhstan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 71.367188, 51.234407 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tashkent", "SOV0NAME": "Uzbekistan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 69.257812, 41.376809 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bishkek", "SOV0NAME": "Kyrgyzstan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 74.531250, 42.875964 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Urumqi", "SOV0NAME": "China", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 87.539062, 43.834527 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baku", "SOV0NAME": "Azerbaijan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 49.833984, 40.446947 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tehran", "SOV0NAME": "Iran", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 51.416016, 35.675147 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kuwait", "SOV0NAME": "Kuwait", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 47.900391, 29.382175 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Riyadh", "SOV0NAME": "Saudi Arabia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 46.757812, 24.686952 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Manama", "SOV0NAME": "Bahrain", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 50.537109, 26.273714 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Doha", "SOV0NAME": "Qatar", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 51.503906, 25.324167 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dubai", "SOV0NAME": "United Arab Emirates", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 55.195312, 25.244696 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Abu Dhabi", "SOV0NAME": "United Arab Emirates", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 54.316406, 24.527135 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ashgabat", "SOV0NAME": "Turkmenistan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 58.359375, 37.996163 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Muscat", "SOV0NAME": "Oman", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 58.535156, 23.644524 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mogadishu", "SOV0NAME": "Somalia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 45.351562, 2.108899 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dushanbe", "SOV0NAME": "Tajikistan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 68.730469, 38.616870 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kabul", "SOV0NAME": "Afghanistan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 69.169922, 34.524661 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Islamabad", "SOV0NAME": "Pakistan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 73.125000, 33.724340 ] } }
,
{ "type": "Feature", "properties": { "NAME": "New Delhi", "SOV0NAME": "India", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 77.167969, 28.613459 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kathmandu", "SOV0NAME": "Nepal", "ELEVATION": 1317 }, "geometry": { "type": "Point", "coordinates": [ 85.253906, 27.761330 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Thimphu", "SOV0NAME": "Bhutan", "ELEVATION": 2320 }, "geometry": { "type": "Point", "coordinates": [ 89.560547, 27.527758 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kolkata", "SOV0NAME": "India", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 88.242188, 22.512557 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mumbai", "SOV0NAME": "India", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 72.773438, 19.062118 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangalore", "SOV0NAME": "India", "ELEVATION": 920 }, "geometry": { "type": "Point", "coordinates": [ 77.519531, 12.983148 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Male", "SOV0NAME": "Maldives", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 73.476562, 4.214943 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Colombo", "SOV0NAME": "Sri Lanka", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 79.804688, 7.013668 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sri Jawewardenepura Kotte", "SOV0NAME": "Sri Lanka", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 79.892578, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Ulaanbaatar", "SOV0NAME": "Mongolia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 106.875000, 47.931066 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dhaka", "SOV0NAME": "Bangladesh", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 90.351562, 23.725012 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Chengdu", "SOV0NAME": "China", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 104.062500, 30.675715 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Naypyidaw", "SOV0NAME": "Myanmar", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 96.064453, 19.808054 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Rangoon", "SOV0NAME": "Myanmar", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 96.152344, 16.804541 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bangkok", "SOV0NAME": "Thailand", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 100.458984, 13.752725 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Vientiane", "SOV0NAME": "Laos", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 102.568359, 17.978733 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hanoi", "SOV0NAME": "Vietnam", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 105.820312, 21.043491 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Phnom Penh", "SOV0NAME": "Cambodia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 104.853516, 11.609193 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kuala Lumpur", "SOV0NAME": "Malaysia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 101.689453, 3.250209 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Putrajaya", "SOV0NAME": "Malaysia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 101.689453, 2.986927 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Singapore", "SOV0NAME": "Singapore", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 103.798828, 1.318243 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Beijing", "SOV0NAME": "China", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 116.367188, 39.977120 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Hong Kong", "SOV0NAME": "China", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 114.169922, 22.350076 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Shanghai", "SOV0NAME": "China", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.376953, 31.278551 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Taipei", "SOV0NAME": "Taiwan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.552734, 25.085599 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pyongyang", "SOV0NAME": "Korea, North", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 125.683594, 39.027719 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Seoul", "SOV0NAME": "Korea, South", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.914062, 37.579413 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Baguio City", "SOV0NAME": "Philippines", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.498047, 16.467695 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Manila", "SOV0NAME": "Philippines", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.937500, 14.689881 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bandar Seri Begawan", "SOV0NAME": "Brunei", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 114.873047, 4.915833 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Melekeok", "SOV0NAME": "Palau", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 134.560547, 7.536764 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Osaka", "SOV0NAME": "Japan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 135.439453, 34.813803 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kyoto", "SOV0NAME": "Japan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 135.703125, 35.101934 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tokyo", "SOV0NAME": "Japan", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.746094, 35.746512 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Palikir", "SOV0NAME": "Federated States of Micronesia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 158.115234, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Majuro", "SOV0NAME": "Marshall Islands", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.298828, 7.188101 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Tarawa", "SOV0NAME": "Kiribati", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 172.968750, 1.406109 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Brazzaville", "SOV0NAME": "Congo (Brazzaville)", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 15.205078, -4.214943 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kinshasa", "SOV0NAME": "Congo (Kinshasa)", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 15.292969, -4.302591 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Luanda", "SOV0NAME": "Angola", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 13.183594, -8.754795 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Windhoek", "SOV0NAME": "Namibia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 17.050781, -22.512557 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Cape Town", "SOV0NAME": "South Africa", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 18.369141, -33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Kigali", "SOV0NAME": "Rwanda", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 29.970703, -1.933227 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bujumbura", "SOV0NAME": "Burundi", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 29.355469, -3.337954 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lusaka", "SOV0NAME": "Zambia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 28.212891, -15.368950 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Harare", "SOV0NAME": "Zimbabwe", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.025391, -17.811456 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Nairobi", "SOV0NAME": "Kenya", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 36.738281, -1.230374 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dodoma", "SOV0NAME": "United Republic of Tanzania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 35.683594, -6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dar es Salaam", "SOV0NAME": "United Republic of Tanzania", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 39.199219, -6.751896 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lilongwe", "SOV0NAME": "Malawi", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 33.750000, -13.923404 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Moroni", "SOV0NAME": "Comoros", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 43.154297, -11.695273 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Gaborone", "SOV0NAME": "Botswana", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.839844, -24.607069 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Johannesburg", "SOV0NAME": "South Africa", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 27.949219, -26.115986 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Bloemfontein", "SOV0NAME": "South Africa", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 26.191406, -29.075375 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Maseru", "SOV0NAME": "Lesotho", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 27.421875, -29.305561 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Pretoria", "SOV0NAME": "South Africa", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 28.212891, -25.641526 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Mbabane", "SOV0NAME": "Swaziland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.113281, -26.273714 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Lobamba", "SOV0NAME": "Swaziland", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.113281, -26.431228 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Maputo", "SOV0NAME": "Mozambique", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 32.519531, -25.878994 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Victoria", "SOV0NAME": "Seychelles", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 55.371094, -4.565474 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Antananarivo", "SOV0NAME": "Madagascar", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 47.460938, -18.895893 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Louis", "SOV0NAME": "Mauritius", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 57.480469, -20.138470 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Jakarta", "SOV0NAME": "Indonesia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 106.787109, -6.140555 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Dili", "SOV0NAME": "East Timor", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 125.507812, -8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Moresby", "SOV0NAME": "Papua New Guinea", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.128906, -9.449062 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Melbourne", "SOV0NAME": "Australia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.931641, -37.788081 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Sydney", "SOV0NAME": "Australia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.171875, -33.870416 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Canberra", "SOV0NAME": "Australia", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 149.062500, -35.245619 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Honiara", "SOV0NAME": "Solomon Islands", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 159.873047, -9.362353 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Port Vila", "SOV0NAME": "Vanuatu", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 168.310547, -17.727759 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Funafuti", "SOV0NAME": "Tuvalu", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.208984, -8.494105 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Suva", "SOV0NAME": "Fiji", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.417969, -18.062312 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Auckland", "SOV0NAME": "New Zealand", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 174.726562, -36.809285 ] } }
,
{ "type": "Feature", "properties": { "NAME": "Wellington", "SOV0NAME": "New Zealand", "ELEVATION": 0 }, "geometry": { "type": "Point", "coordinates": [ 174.726562, -41.244772 ] } }
] }
] }
] }

View File

@ -573,7 +573,46 @@ void handle_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<st
}
}
void decode(struct reader *readers, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution, std::string &description, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, std::string &name, json_object *filter) {
void handle_vector_layers(json_object *vector_layers, std::map<std::string, layermap_entry> &layermap, std::map<std::string, std::string> &attribute_descriptions) {
if (vector_layers != NULL && vector_layers->type == JSON_ARRAY) {
for (size_t i = 0; i < vector_layers->length; i++) {
if (vector_layers->array[i]->type == JSON_HASH) {
json_object *id = json_hash_get(vector_layers->array[i], "id");
json_object *desc = json_hash_get(vector_layers->array[i], "description");
if (id != NULL && desc != NULL && id->type == JSON_STRING && desc->type == JSON_STRING) {
std::string sid = id->string;
std::string sdesc = desc->string;
if (sdesc.size() != 0) {
auto f = layermap.find(sid);
if (f != layermap.end()) {
f->second.description = sdesc;
}
}
}
json_object *fields = json_hash_get(vector_layers->array[i], "fields");
if (fields != NULL && fields->type == JSON_HASH) {
for (size_t j = 0; j < fields->length; j++) {
if (fields->keys[j]->type == JSON_STRING && fields->values[j]->type) {
const char *desc2 = fields->values[j]->string;
if (strcmp(desc2, "Number") != 0 &&
strcmp(desc2, "String") != 0 &&
strcmp(desc2, "Boolean") != 0 &&
strcmp(desc2, "Mixed") != 0) {
attribute_descriptions.insert(std::pair<std::string, std::string>(fields->keys[j]->string, desc2));
}
}
}
}
}
}
}
}
void decode(struct reader *readers, std::map<std::string, layermap_entry> &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector<std::string> &header, std::map<std::string, std::vector<std::string>> &mapping, std::set<std::string> &exclude, int ifmatched, std::string &attribution, std::string &description, std::set<std::string> &keep_layers, std::set<std::string> &remove_layers, std::string &name, json_object *filter, std::map<std::string, std::string> &attribute_descriptions) {
std::vector<std::map<std::string, layermap_entry>> layermaps;
for (size_t i = 0; i < CPUS; i++) {
layermaps.push_back(std::map<std::string, layermap_entry>());
@ -749,6 +788,27 @@ void decode(struct reader *readers, std::map<std::string, layermap_entry> &layer
}
sqlite3_finalize(r->stmt);
}
if (sqlite3_prepare_v2(db, "SELECT value from metadata where name = 'json'", -1, &r->stmt, NULL) == SQLITE_OK) {
if (sqlite3_step(r->stmt) == SQLITE_ROW) {
const unsigned char *s = sqlite3_column_text(r->stmt, 0);
if (s != NULL) {
json_pull *jp = json_begin_string((const char *) s);
json_object *o = json_read_tree(jp);
if (o != NULL && o->type == JSON_HASH) {
json_object *vector_layers = json_hash_get(o, "vector_layers");
handle_vector_layers(vector_layers, layermap, attribute_descriptions);
json_free(o);
}
json_end(jp);
}
}
sqlite3_finalize(r->stmt);
}
// Closes either real db or temp mirror of metadata.json
if (sqlite3_close(db) != SQLITE_OK) {
@ -990,7 +1050,9 @@ int main(int argc, char **argv) {
*rr = r;
}
decode(readers, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name, filter);
std::map<std::string, std::string> attribute_descriptions;
decode(readers, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name, filter, attribute_descriptions);
if (set_attribution.size() != 0) {
attribution = set_attribution;
@ -1002,7 +1064,7 @@ int main(int argc, char **argv) {
name = set_name;
}
mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg);
mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg, attribute_descriptions);
if (outdb != NULL) {
mbtiles_close(outdb, argv[0]);

View File

@ -1,6 +1,6 @@
#ifndef VERSION_HPP
#define VERSION_HPP
#define VERSION "tippecanoe v1.28.1\n"
#define VERSION "tippecanoe v1.29.0\n"
#endif