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
24 changed files with 1226 additions and 60 deletions
+9
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 ## 1.28.1
* Explicitly check for infinite and not-a-number input coordinates * Explicitly check for infinite and not-a-number input coordinates
+9 -3
View File
@@ -82,7 +82,7 @@ indent:
TESTS = $(wildcard tests/*/out/*.json) TESTS = $(wildcard tests/*/out/*.json)
SPACE = $(NULL) $(NULL) 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 ./unit
suffixes = json json.gz 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 rm tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/out/enum.check
join-test: tile-join 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 ./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 ./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 ./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 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 ./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 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 -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 ./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 ./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 cmp tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles.json
rm -f tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles 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 # Use this target to regenerate the standards that the tests are compared against
# after making a change that legitimately changes their output # after making a change that legitimately changes their output
+6
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 * `-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`. 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` _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`. 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 `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 `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. 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 * `-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 that are dropped, coalesced-as-needed, or clustered. The _operation_ may be
`sum`, `product`, `mean`, `max`, `min`, `concat`, or `comma` `sum`, `product`, `mean`, `max`, `min`, `concat`, or `comma`
+5
View File
@@ -27,6 +27,11 @@ std::vector<std::string> csv_split(const char *s) {
while (*s && isspace(*s)) { while (*s && isspace(*s)) {
s++; s++;
} }
if (*s == '\0' || *s == '\r' || *s == '\n') {
ret.push_back(std::string(""));
break;
}
} }
} }
+2
View File
@@ -318,7 +318,9 @@ void join_csv(json_object *j) {
} else if (is_number(v)) { } else if (is_number(v)) {
attr_type = JSON_NUMBER; attr_type = JSON_NUMBER;
} }
}
{
// This knows more about the structure of JSON objects than it ought to // This knows more about the structure of JSON objects than it ought to
json_object *ko = (json_object *) malloc(sizeof(json_object)); json_object *ko = (json_object *) malloc(sizeof(json_object));
+59 -4
View File
@@ -83,6 +83,7 @@ int additional[256];
struct source { struct source {
std::string layer = ""; std::string layer = "";
std::string file = ""; std::string file = "";
std::string description = "";
}; };
size_t CPUS; 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; int ret = EXIT_SUCCESS;
std::vector<struct reader> readers; 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; std::map<std::string, layermap_entry> layermap;
for (size_t l = 0; l < nlayers; l++) { for (size_t l = 0; l < nlayers; l++) {
layermap_entry e = layermap_entry(l); layermap_entry e = layermap_entry(l);
e.description = sources[l].description;
layermap.insert(std::pair<std::string, layermap_entry>(sources[l].layer, e)); 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; 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; 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)); 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) { int main(int argc, char **argv) {
#ifdef MTRACE #ifdef MTRACE
mtrace(); mtrace();
@@ -2409,6 +2447,7 @@ int main(int argc, char **argv) {
std::set<std::string> exclude, include; std::set<std::string> exclude, include;
std::map<std::string, int> attribute_types; std::map<std::string, int> attribute_types;
std::map<std::string, attribute_op> attribute_accum; std::map<std::string, attribute_op> attribute_accum;
std::map<std::string, std::string> attribute_descriptions;
int exclude_all = 0; int exclude_all = 0;
int read_parallel = 0; int read_parallel = 0;
int files_open_at_start; int files_open_at_start;
@@ -2459,6 +2498,7 @@ int main(int argc, char **argv) {
{"Modifying feature attributes", 0, 0, 0}, {"Modifying feature attributes", 0, 0, 0},
{"attribute-type", required_argument, 0, 'T'}, {"attribute-type", required_argument, 0, 'T'},
{"attribute-description", required_argument, 0, 'Y'},
{"accumulate-attribute", required_argument, 0, 'E'}, {"accumulate-attribute", required_argument, 0, 'E'},
{"Filtering features by attributes", 0, 0, 0}, {"Filtering features by attributes", 0, 0, 0},
@@ -2605,14 +2645,18 @@ int main(int argc, char **argv) {
break; break;
case 'L': { case 'L': {
struct source src;
if (optarg[0] == '{') {
parse_json_source(optarg, src);
} else {
char *cp = strchr(optarg, ':'); char *cp = strchr(optarg, ':');
if (cp == NULL || cp == optarg) { if (cp == NULL || cp == optarg) {
fprintf(stderr, "%s: -L requires layername:file\n", argv[0]); fprintf(stderr, "%s: -L requires layername:file\n", argv[0]);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
struct source src;
src.layer = std::string(optarg).substr(0, cp - optarg); src.layer = std::string(optarg).substr(0, cp - optarg);
src.file = std::string(cp + 1); src.file = std::string(cp + 1);
}
sources.push_back(src); sources.push_back(src);
break; break;
} }
@@ -2724,6 +2768,17 @@ int main(int argc, char **argv) {
exclude_all = 1; exclude_all = 1;
break; 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': case 'J':
filter = read_filter(optarg); filter = read_filter(optarg);
break; break;
@@ -2995,7 +3050,7 @@ int main(int argc, char **argv) {
long long file_bbox[4] = {UINT_MAX, UINT_MAX, 0, 0}; 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) { if (outdb != NULL) {
mbtiles_close(outdb, argv[0]); mbtiles_close(outdb, argv[0]);
+10
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\&. 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 .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. \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 .RE
.PP .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\&. 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\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. If the type is \fB\fCint\fR and the original attribute was floating\-point, it is rounded to the nearest integer.
.IP \(bu 2 .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 \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 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 \fB\fCsum\fR, \fB\fCproduct\fR, \fB\fCmean\fR, \fB\fCmax\fR, \fB\fCmin\fR, \fB\fCconcat\fR, or \fB\fCcomma\fR
+8 -2
View File
@@ -264,7 +264,7 @@ void tilestats(std::map<std::string, layermap_entry> const &layermap1, size_t el
state.json_end_hash(); 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; char *sql, *err;
sqlite3 *db = outdb; 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(lnames[i]);
state.json_write_string("description"); state.json_write_string("description");
state.json_write_string(""); state.json_write_string(fk->second.description);
state.json_write_string("minzoom"); state.json_write_string("minzoom");
state.json_write_signed(fk->second.minzoom); state.json_write_signed(fk->second.minzoom);
@@ -417,6 +417,8 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam
state.json_write_string(j->first); state.json_write_string(j->first);
auto f = attribute_descriptions.find(j->first);
if (f == attribute_descriptions.end()) {
int type = 0; int type = 0;
for (auto s : j->second.sample_values) { for (auto s : j->second.sample_values) {
type |= (1 << s.type); type |= (1 << s.type);
@@ -431,6 +433,9 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam
} else { } else {
state.json_write_string("Mixed"); state.json_write_string("Mixed");
} }
} else {
state.json_write_string(f->second);
}
} }
state.nospace = true; state.nospace = true;
@@ -550,6 +555,7 @@ std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::
auto out_entry = out.find(layername); auto out_entry = out.find(layername);
out_entry->second.minzoom = map->second.minzoom; out_entry->second.minzoom = map->second.minzoom;
out_entry->second.maxzoom = map->second.maxzoom; out_entry->second.maxzoom = map->second.maxzoom;
out_entry->second.description = map->second.description;
} }
auto out_entry = out.find(layername); auto out_entry = out.find(layername);
+2 -1
View File
@@ -25,6 +25,7 @@ struct layermap_entry {
std::map<std::string, type_and_string_stats> file_keys{}; std::map<std::string, type_and_string_stats> file_keys{};
int minzoom = 0; int minzoom = 0;
int maxzoom = 0; int maxzoom = 0;
std::string description = "";
size_t points = 0; size_t points = 0;
size_t lines = 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_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); void mbtiles_close(sqlite3 *outdb, const char *pgm);
@@ -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,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,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,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 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,,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,,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,,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 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
1 scalerank natscale labelrank featurecla name namepar namealt diffascii nameascii adm0cap capalt capin worldcity megacity sov0name sov_a3 adm0name adm0_a3 adm1name iso_a2 note latitude longitude changed namediff diffnote pop_max pop_min pop_other rank_max rank_min geonameid meganame ls_name ls_match checkme min_zoom
239 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
240 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
241 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
242 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
243 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
244 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
245
246 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
247 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
248 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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
"center": "-122.299805,37.892187,12", "center": "-122.299805,37.892187,12",
"description": "tests/join-population/tabblock_06001420.mbtiles", "description": "tests/join-population/tabblock_06001420.mbtiles",
"format": "pbf", "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", "maxzoom": "12",
"minzoom": "0", "minzoom": "0",
"name": "tests/join-population/tabblock_06001420.mbtiles", "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": "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 ] ] ] } } { "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": "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 ] ] ] } } { "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": "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 ] ] ] } } { "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": "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 ] ] ] } } { "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": "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 ] ] ] } } { "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
+1 -1
View File
@@ -160,4 +160,4 @@ GEOID10, population
"060014206003014",66 "060014206003014",66
"060014206003015",15 "060014206003015",15
"060014206003017",12 "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
@@ -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":"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":"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":"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]]]}}
+502
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 ] } }
] }
] }
] }
@@ -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 ] } }
] }
] }
] }
+65 -3
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; std::vector<std::map<std::string, layermap_entry>> layermaps;
for (size_t i = 0; i < CPUS; i++) { for (size_t i = 0; i < CPUS; i++) {
layermaps.push_back(std::map<std::string, layermap_entry>()); 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); 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 // Closes either real db or temp mirror of metadata.json
if (sqlite3_close(db) != SQLITE_OK) { if (sqlite3_close(db) != SQLITE_OK) {
@@ -990,7 +1050,9 @@ int main(int argc, char **argv) {
*rr = r; *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) { if (set_attribution.size() != 0) {
attribution = set_attribution; attribution = set_attribution;
@@ -1002,7 +1064,7 @@ int main(int argc, char **argv) {
name = set_name; 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) { if (outdb != NULL) {
mbtiles_close(outdb, argv[0]); mbtiles_close(outdb, argv[0]);
+1 -1
View File
@@ -1,6 +1,6 @@
#ifndef VERSION_HPP #ifndef VERSION_HPP
#define VERSION_HPP #define VERSION_HPP
#define VERSION "tippecanoe v1.28.1\n" #define VERSION "tippecanoe v1.29.0\n"
#endif #endif