Improve tiling speed (#195)

* Add a way to run tippecanoe single-threaded for profiling

* Do less work when the tilestats sample values list is already full

* Save a copy when retrieving the attribute key

* Fewer atomic operations

* Move string hashing from mbtiles to text

* Only do approximate attribute deduplication when writing tiles

* Feature dropping tests are sensitive to exact tile size

* All tile creators now create a string pool for the tile

* Features clipped away to nothing should not participate in that tile

* Revert "Only do approximate attribute deduplication when writing tiles"

This reverts commit c42b34b498.

* Also revert the related test changes

* Revert "Revert "Only do approximate attribute deduplication when writing tiles""

This reverts commit 18509876c3.

* Be more specific about the string hash function

* Use fnv1a instead of std::hash for everything

* Reduce the chance of hash collisions

* Stick a hash search on the front of the tree search in addpool

* Eliminate repeated hashing of the same string

* Switch instead of ifs in json parsing

* A few more cases to populate the hash in addpool

* Store the hash in the tree instead of recalculating

* Add explanatory comment for mysterious argument

* Fewer copies in attribute stringification

* Clean up ancient weirdness in JSON attribute stringification

* More serial_val cleanup

* Pass a serial_feature to rewrite instead of many broken-down arguments

* Get rid of the multiple geometries within `partial`

* Revert "Pass a serial_feature to rewrite instead of many broken-down arguments"

This reverts commit 6f4ab9b725.

* Goodbye, struct coalesce

* Revert "Features clipped away to nothing should not participate in that tile"

This reverts commit 124462fbdc.

* Migrating fields from partial to serial_feature

* Name reconciliation between serial_feature and partial

* Replace struct partial with an augmented serial_feature

* Fix some overzealous search-and-replace renaming

* Don't say struct so often

* Remove more of the former partial construction

* Commenting and cleaning up

* Trying again to avoid all these arguments to rewrite

* I swear I did this same thing before and it didn't work.

* More rewrite cleanup

* Exile --detect-shared-borders to its own file

* Add missing headers

* More commenting and cleanup

* More comments

* Sprinkle consts around

* Emplacing and std::moving

* More cleanup

* That shouldn't have worked after a std::move

* Don't need to allocate memory to compare keys

* Reduce use of the global string pool in tiling

* Another avoidable mvt_value construction

* Further reduction to explicit string pool passing

* These reverses are no longer optimizations

* These layernames can all be references

* Don't drag an unused layername string around with every feature

* Heed a compiler warning about potential buffer overflow

* Fix my confusion about which feature's string pool is relevant

* Avoid some unnecessary allocations in attribute accumulation

* Maybe faster serialization?

* Eliminate a comparison

* Do the same here

* Save a couple of allocations when parsing numbers in JSON

* Immediately assign features to layers instead of subdividing later

* Maintain tilestats for tippecanoe:retain_points_multiplier_sequence

* Crunch out more duplicate attribute values when writing out the tile

* Do tilestats for tippecanoe:retain_points_multiplier_first too

* Shell filters need to be real threads, even if nothing else does

* Simplify tippecanoe_minzoom/maxzoom representation

* Update version and changelog
This commit is contained in:
Erica Fischer
2024-02-07 17:50:35 -08:00
committed by GitHub
parent c5c4698161
commit e2a7a409c7
46 changed files with 22817 additions and 22778 deletions
+5
View File
@@ -1,3 +1,8 @@
# 2.42.0
* Improve tiling speed
* Generate tilestats for the --retain-points-multiplier attributes
# 2.41.3
* Performance optimizations to tile reading, writing, and overzooming
+3 -3
View File
@@ -58,7 +58,7 @@ C = $(wildcard *.c) $(wildcard *.cpp)
INCLUDES = -I/usr/local/include -I.
LIBS = -L/usr/local/lib
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o pmtiles_file.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o json_logger.o visvalingam.o compression.o clip.o sort.o attribute.o
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o pmtiles_file.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o json_logger.o visvalingam.o compression.o clip.o sort.o attribute.o thread.o shared_borders.o
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
tippecanoe-enumerate: enumerate.o
@@ -67,7 +67,7 @@ tippecanoe-enumerate: enumerate.o
tippecanoe-decode: decode.o projection.o mvt.o write_json.o text.o jsonpull/jsonpull.o dirtiles.o pmtiles_file.o
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3
tile-join: tile-join.o projection.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o evaluator.o csv.o write_json.o pmtiles_file.o clip.o attribute.o
tile-join: tile-join.o projection.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o evaluator.o csv.o write_json.o pmtiles_file.o clip.o attribute.o thread.o
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
tippecanoe-json-tool: jsontool.o jsonpull/jsonpull.o csv.o text.o geojson-loop.o
@@ -91,7 +91,7 @@ clean:
rm -f ./tippecanoe ./tippecanoe-* ./tile-join ./unit *.o *.d */*.o */*.d tests/**/*.mbtiles tests/**/*.check
indent:
clang-format -i -style="{BasedOnStyle: Google, IndentWidth: 8, UseTab: Always, AllowShortIfStatementsOnASingleLine: false, ColumnLimit: 0, ContinuationIndentWidth: 8, SpaceAfterCStyleCast: true, IndentCaseLabels: false, AllowShortBlocksOnASingleLine: false, AllowShortFunctionsOnASingleLine: false, SortIncludes: false}" $(filter-out flatgeobuf.cpp,$(C)) $(H)
clang-format -i -style="{BasedOnStyle: Google, IndentWidth: 8, UseTab: Always, AllowShortIfStatementsOnASingleLine: false, ColumnLimit: 0, ContinuationIndentWidth: 8, SpaceAfterCStyleCast: true, IndentCaseLabels: false, AllowShortBlocksOnASingleLine: false, AllowShortFunctionsOnASingleLine: false, SortIncludes: false}" $(filter-out flatgeobuf.cpp,$(C)) $(H) jsonpull/*.[ch]
TESTS = $(wildcard tests/*/out/*.json)
SPACE = $(NULL) $(NULL)
+1 -1
View File
@@ -79,7 +79,7 @@ void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribut
set_attribute_accum(attribute_accum, name, type);
}
void preserve_attribute(attribute_op op, std::string &key, serial_val &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state) {
void preserve_attribute(attribute_op const &op, std::string const &key, serial_val const &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state) {
for (size_t i = 0; i < full_keys.size(); i++) {
if (key == full_keys[i]) {
switch (op) {
+1 -1
View File
@@ -23,6 +23,6 @@ struct serial_val;
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, std::string name, std::string type);
void set_attribute_accum(std::unordered_map<std::string, attribute_op> &attribute_accum, const char *arg, char **argv);
void preserve_attribute(attribute_op op, std::string &key, serial_val &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state);
void preserve_attribute(attribute_op const &op, const std::string &key, serial_val const &val, std::vector<std::string> &full_keys, std::vector<serial_val> &full_values, std::unordered_map<std::string, accum_state> &attribute_accum_state);
#endif
+5 -4
View File
@@ -785,7 +785,7 @@ struct tile_feature {
size_t seq = 0;
};
static void feature_out(std::vector<tile_feature> const &features, mvt_layer &outlayer, std::set<std::string> const &keep, std::unordered_map<std::string, attribute_op> const &attribute_accum) {
static void feature_out(std::vector<tile_feature> const &features, mvt_layer &outlayer, std::set<std::string> const &keep, std::unordered_map<std::string, attribute_op> const &attribute_accum, std::shared_ptr<std::string> const &tile_stringpool) {
// Add geometry to output feature
mvt_feature outfeature;
@@ -849,7 +849,7 @@ static void feature_out(std::vector<tile_feature> const &features, mvt_layer &ou
for (size_t i = 0; i < full_keys.size(); i++) {
if (keep.size() == 0 || keep.find(full_keys[i]) != keep.end()) {
outlayer.tag(outfeature, full_keys[i], stringified_to_mvt_value(full_values[i].type, full_values[i].s.c_str()));
outlayer.tag(outfeature, full_keys[i], stringified_to_mvt_value(full_values[i].type, full_values[i].s.c_str(), tile_stringpool));
}
}
} else {
@@ -875,6 +875,7 @@ std::string overzoom(const mvt_tile &tile, int oz, int ox, int oy, int nz, int n
std::vector<std::pair<unsigned, unsigned>> *next_overzoomed_tiles,
bool demultiply, json_object *filter, bool preserve_input_order, std::unordered_map<std::string, attribute_op> const &attribute_accum) {
mvt_tile outtile;
std::shared_ptr<std::string> tile_stringpool = std::make_shared<std::string>();
for (auto const &layer : tile.layers) {
mvt_layer outlayer = mvt_layer();
@@ -917,7 +918,7 @@ std::string overzoom(const mvt_tile &tile, int oz, int ox, int oy, int nz, int n
if (flush_multiplier_cluster) {
if (pending_tile_features.size() > 0) {
feature_out(pending_tile_features, outlayer, keep, attribute_accum);
feature_out(pending_tile_features, outlayer, keep, attribute_accum, tile_stringpool);
pending_tile_features.clear();
}
}
@@ -1020,7 +1021,7 @@ std::string overzoom(const mvt_tile &tile, int oz, int ox, int oy, int nz, int n
}
if (pending_tile_features.size() > 0) {
feature_out(pending_tile_features, outlayer, keep, attribute_accum);
feature_out(pending_tile_features, outlayer, keep, attribute_accum, tile_stringpool);
pending_tile_features.clear();
}
+5 -5
View File
@@ -7,6 +7,7 @@
#include "milo/dtoa_milo.h"
#include "main.hpp"
#include "errors.hpp"
#include "thread.hpp"
static constexpr uint8_t magicbytes[8] = { 0x66, 0x67, 0x62, 0x03, 0x66, 0x67, 0x62, 0x01 };
@@ -131,7 +132,6 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
serial_feature sf;
sf.layer = layer;
sf.layername = layername;
sf.segment = sst->segment;
if (feature_sequence_id >= 0) {
sf.has_id = true;
@@ -139,8 +139,8 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
sf.has_id = false;
}
sf.id = feature_sequence_id;
sf.has_tippecanoe_minzoom = false;
sf.has_tippecanoe_maxzoom = false;
sf.tippecanoe_minzoom = -1;
sf.tippecanoe_maxzoom = -1;
sf.feature_minzoom = false;
sf.seq = (*sst->layer_seq);
sf.geometry = dv;
@@ -246,7 +246,7 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
sf.full_keys = full_keys;
sf.full_values = full_values;
serialize_feature(sst, sf);
serialize_feature(sst, sf, layername);
}
struct fgb_queued_feature {
@@ -303,7 +303,7 @@ void fgbRunQueue() {
}
for (size_t i = 0; i < CPUS; i++) {
if (pthread_create(&pthreads[i], NULL, fgb_run_parse_feature, &qra[i]) != 0) {
if (thread_create(&pthreads[i], NULL, fgb_run_parse_feature, &qra[i]) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
+9 -12
View File
@@ -15,6 +15,7 @@
#include "jsonpull/jsonpull.h"
#include "text.hpp"
#include "errors.hpp"
#include "thread.hpp"
#define POINT 0
#define MULTIPOINT 1
@@ -379,12 +380,11 @@ void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<s
serial_feature sf;
sf.layer = layer;
sf.layername = layername;
sf.segment = sst->segment;
sf.has_id = has_id;
sf.id = id;
sf.has_tippecanoe_minzoom = false;
sf.has_tippecanoe_maxzoom = false;
sf.tippecanoe_minzoom = -1;
sf.tippecanoe_maxzoom = -1;
sf.feature_minzoom = false;
sf.seq = *(sst->layer_seq);
sf.geometry = dv[i].dv;
@@ -400,19 +400,17 @@ void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<s
if (o != NULL) {
json_object *min = json_hash_get(o, "minzoom");
if (min != NULL && (min->type == JSON_NUMBER)) {
sf.has_tippecanoe_minzoom = true;
sf.tippecanoe_minzoom = integer_zoom(sst->fname, milo::dtoa_milo(min->value.number.number));
}
json_object *max = json_hash_get(o, "maxzoom");
if (max != NULL && (max->type == JSON_NUMBER)) {
sf.has_tippecanoe_maxzoom = true;
sf.tippecanoe_maxzoom = integer_zoom(sst->fname, milo::dtoa_milo(max->value.number.number));
}
json_object *tlayer = json_hash_get(o, "layer");
if (tlayer != NULL && (tlayer->type == JSON_STRING)) {
sf.layername = tlayer->value.string.string;
layername = tlayer->value.string.string;
}
}
@@ -420,7 +418,7 @@ void readFeature(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<s
json_end(jp);
}
serialize_feature(sst, sf);
serialize_feature(sst, sf, layername);
}
}
@@ -465,7 +463,7 @@ void runQueue() {
}
for (size_t i = 0; i < CPUS; i++) {
if (pthread_create(&pthreads[i], NULL, run_parse_feature, &qra[i]) != 0) {
if (thread_create(&pthreads[i], NULL, run_parse_feature, &qra[i]) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
@@ -506,17 +504,16 @@ void outBareGeometry(drawvec const &dv, int type, struct serialization_state *ss
serial_feature sf;
sf.layer = layer;
sf.layername = layername;
sf.segment = sst->segment;
sf.has_id = false;
sf.has_tippecanoe_minzoom = false;
sf.has_tippecanoe_maxzoom = false;
sf.tippecanoe_minzoom = -1;
sf.tippecanoe_maxzoom = -1;
sf.feature_minzoom = false;
sf.seq = (*sst->layer_seq);
sf.geometry = dv;
sf.t = type;
serialize_feature(sst, sf);
serialize_feature(sst, sf, layername);
}
void readFeatureCollection(protozero::pbf_reader &pbf, size_t dim, double e, std::vector<std::string> &keys, std::vector<struct serialization_state> *sst, int layer, std::string layername) {
+3 -4
View File
@@ -115,12 +115,11 @@ void parse_geocsv(std::vector<struct serialization_state> &sst, std::string fnam
serial_feature sf;
sf.layer = layer;
sf.layername = layername;
sf.segment = sst[0].segment;
sf.has_id = false;
sf.id = 0;
sf.has_tippecanoe_minzoom = false;
sf.has_tippecanoe_maxzoom = false;
sf.tippecanoe_minzoom = -1;
sf.tippecanoe_maxzoom = -1;
sf.feature_minzoom = false;
sf.seq = *(sst[0].layer_seq);
sf.geometry = dv;
@@ -128,7 +127,7 @@ void parse_geocsv(std::vector<struct serialization_state> &sst, std::string fnam
sf.full_keys = full_keys;
sf.full_values = full_values;
serialize_feature(&sst[0], sf);
serialize_feature(&sst[0], sf, layername);
}
if (fname.size() != 0) {
+12 -47
View File
@@ -10,7 +10,6 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <string.h>
#include <fcntl.h>
#include <ctype.h>
#include <errno.h>
@@ -41,7 +40,7 @@
#include "milo/dtoa_milo.h"
#include "errors.hpp"
int serialize_geojson_feature(struct serialization_state *sst, json_object *geometry, json_object *properties, json_object *id, int layer, json_object *tippecanoe, json_object *feature, std::string layername) {
int serialize_geojson_feature(struct serialization_state *sst, json_object *geometry, json_object *properties, json_object *id, int layer, json_object *tippecanoe, json_object *feature, std::string const &layername) {
json_object *geometry_type = json_hash_get(geometry, "type");
if (geometry_type == NULL) {
static int warned = 0;
@@ -81,7 +80,7 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom
int tippecanoe_minzoom = -1;
int tippecanoe_maxzoom = -1;
std::string tippecanoe_layername;
std::string tippecanoe_layername = layername;
if (tippecanoe != NULL) {
json_object *min = json_hash_get(tippecanoe, "minzoom");
@@ -182,36 +181,18 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom
nprop = properties->value.object.length;
}
std::vector<char *> metakey;
metakey.resize(nprop);
std::vector<std::string> keys;
std::vector<serial_val> values;
std::vector<std::string> metaval;
metaval.resize(nprop);
std::vector<int> metatype;
metatype.resize(nprop);
size_t m = 0;
keys.reserve(nprop);
values.reserve(nprop);
for (size_t i = 0; i < nprop; i++) {
if (properties->value.object.keys[i]->type == JSON_STRING) {
std::string s(properties->value.object.keys[i]->value.string.string);
serial_val sv = stringify_value(properties->value.object.values[i], sst->fname, sst->line, feature);
int type = -1;
std::string val;
stringify_value(properties->value.object.values[i], type, val, sst->fname, sst->line, feature);
if (type >= 0) {
metakey[m] = properties->value.object.keys[i]->value.string.string;
metatype[m] = type;
metaval[m] = val;
m++;
} else {
metakey[m] = properties->value.object.keys[i]->value.string.string;
metatype[m] = mvt_null;
metaval[m] = "null";
m++;
}
keys.emplace_back(properties->value.object.keys[i]->value.string.string);
values.push_back(std::move(sv));
}
}
@@ -224,31 +205,15 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom
sf.t = mb_geometry[t];
sf.has_id = has_id;
sf.id = id_value;
sf.has_tippecanoe_minzoom = (tippecanoe_minzoom != -1);
sf.tippecanoe_minzoom = tippecanoe_minzoom;
sf.has_tippecanoe_maxzoom = (tippecanoe_maxzoom != -1);
sf.tippecanoe_maxzoom = tippecanoe_maxzoom;
sf.geometry = dv;
sf.feature_minzoom = 0; // Will be filled in during index merging
sf.seq = *(sst->layer_seq);
sf.full_keys = std::move(keys);
sf.full_values = std::move(values);
if (tippecanoe_layername.size() != 0) {
sf.layername = tippecanoe_layername;
} else {
sf.layername = layername;
}
for (size_t i = 0; i < m; i++) {
sf.full_keys.push_back(metakey[i]);
serial_val sv;
sv.type = metatype[i];
sv.s = metaval[i];
sf.full_values.push_back(sv);
}
return serialize_feature(sst, sf);
return serialize_feature(sst, sf, tippecanoe_layername);
}
void check_crs(json_object *j, const char *reading) {
+25 -33
View File
@@ -21,7 +21,7 @@
#include "errors.hpp"
#include "projection.hpp"
drawvec decode_geometry(char **meta, int z, unsigned tx, unsigned ty, long long *bbox, unsigned initial_x, unsigned initial_y) {
drawvec decode_geometry(const char **meta, int z, unsigned tx, unsigned ty, long long *bbox, unsigned initial_x, unsigned initial_y) {
drawvec out;
bbox[0] = LLONG_MAX;
@@ -56,18 +56,10 @@ drawvec decode_geometry(char **meta, int z, unsigned tx, unsigned ty, long long
wwy -= ty << (32 - z);
}
if (wwx < bbox[0]) {
bbox[0] = wwx;
}
if (wwy < bbox[1]) {
bbox[1] = wwy;
}
if (wwx > bbox[2]) {
bbox[2] = wwx;
}
if (wwy > bbox[3]) {
bbox[3] = wwy;
}
bbox[0] = std::min(wwx, bbox[0]);
bbox[1] = std::min(wwy, bbox[1]);
bbox[2] = std::max(wwx, bbox[2]);
bbox[3] = std::max(wwy, bbox[3]);
d.x = wwx;
d.y = wwy;
@@ -118,13 +110,13 @@ void check_polygon(drawvec &geom) {
mapbox::geometry::linear_ring<long long> lr;
for (size_t k = i; k < j; k++) {
lr.push_back(mapbox::geometry::point<long long>(geom[k].x, geom[k].y));
lr.push_back({geom[k].x, geom[k].y});
}
if (lr.size() >= 3) {
mapbox::geometry::polygon<long long> p;
p.push_back(lr);
mp.push_back(p);
p.push_back(std::move(lr));
mp.push_back(std::move(p));
}
}
@@ -176,7 +168,7 @@ void check_polygon(drawvec &geom) {
}
}
drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *still_needs_simplification, bool *reduced_away, double *accum_area, serial_feature *this_feature, serial_feature *tiny_feature) {
drawvec reduce_tiny_poly(drawvec const &geom, int z, int detail, bool *still_needs_simplification, bool *reduced_away, double *accum_area, serial_feature *this_feature, serial_feature *tiny_feature) {
drawvec out;
const double pixel = (1LL << (32 - detail - z)) * (double) tiny_polygon_size;
bool includes_real = false;
@@ -220,11 +212,11 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *still_needs_sim
if (area > 0 && *accum_area > pixel * pixel) {
// XXX use centroid;
out.push_back(draw(VT_MOVETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2 + pixel));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2 + pixel));
out.push_back(draw(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2));
out.emplace_back(VT_MOVETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2);
out.emplace_back(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2);
out.emplace_back(VT_LINETO, geom[i].x - pixel / 2 + pixel, geom[i].y - pixel / 2 + pixel);
out.emplace_back(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2 + pixel);
out.emplace_back(VT_LINETO, geom[i].x - pixel / 2, geom[i].y - pixel / 2);
includes_dust = true;
*accum_area -= pixel * pixel;
@@ -296,7 +288,7 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *still_needs_sim
return out;
}
int quick_check(long long *bbox, int z, long long buffer) {
int quick_check(const long long *bbox, int z, long long buffer) {
long long min = 0;
long long area = 1LL << (32 - z);
@@ -454,7 +446,7 @@ static void douglas_peucker(drawvec &geom, int start, int n, double e, size_t ke
// If any line segment crosses a tile boundary, add a node there
// that cannot be simplified away, to prevent the edge of any
// feature from jumping abruptly at the tile boundary.
drawvec impose_tile_boundaries(drawvec &geom, long long extent) {
drawvec impose_tile_boundaries(const drawvec &geom, long long extent) {
drawvec out;
for (size_t i = 0; i < geom.size(); i++) {
@@ -469,11 +461,11 @@ drawvec impose_tile_boundaries(drawvec &geom, long long extent) {
if (c > 1) { // clipped
if (x1 != geom[i - 1].x || y1 != geom[i - 1].y) {
out.push_back(draw(VT_LINETO, x1, y1));
out.emplace_back(VT_LINETO, x1, y1);
out[out.size() - 1].necessary = 1;
}
if (x2 != geom[i - 0].x || y2 != geom[i - 0].y) {
out.push_back(draw(VT_LINETO, x2, y2));
out.emplace_back(VT_LINETO, x2, y2);
out[out.size() - 1].necessary = 1;
}
}
@@ -567,17 +559,17 @@ drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool ma
}
}
drawvec out;
size_t out = 0;
for (size_t i = 0; i < geom.size(); i++) {
if (geom[i].necessary) {
out.push_back(geom[i]);
geom[out++] = geom[i];
}
}
geom.resize(out);
return geom;
}
return out;
}
drawvec reorder_lines(drawvec &geom) {
drawvec reorder_lines(const drawvec &geom) {
// Only reorder simple linestrings with a single moveto
if (geom.size() == 0) {
@@ -623,7 +615,7 @@ drawvec reorder_lines(drawvec &geom) {
return geom;
}
drawvec fix_polygon(drawvec &geom) {
drawvec fix_polygon(const drawvec &geom) {
int outer = 1;
drawvec out;
+5 -5
View File
@@ -67,22 +67,22 @@ struct draw {
typedef std::vector<draw> drawvec;
struct serial_feature;
drawvec decode_geometry(char **meta, int z, unsigned tx, unsigned ty, long long *bbox, unsigned initial_x, unsigned initial_y);
drawvec decode_geometry(const char **meta, int z, unsigned tx, unsigned ty, long long *bbox, unsigned initial_x, unsigned initial_y);
void to_tile_scale(drawvec &geom, int z, int detail);
drawvec from_tile_scale(drawvec const &geom, int z, int detail);
drawvec remove_noop(drawvec geom, int type, int shift);
drawvec clip_point(drawvec &geom, int z, long long buffer);
drawvec clean_or_clip_poly(drawvec &geom, int z, int buffer, bool clip, bool try_scaling);
drawvec close_poly(drawvec &geom);
drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *still_needs_simplification, bool *reduced_away, double *accum_area, serial_feature *this_feature, serial_feature *tiny_feature);
drawvec reduce_tiny_poly(const drawvec &geom, int z, int detail, bool *still_needs_simplification, bool *reduced_away, double *accum_area, serial_feature *this_feature, serial_feature *tiny_feature);
int clip(long long *x0, long long *y0, long long *x1, long long *y1, long long xmin, long long ymin, long long xmax, long long ymax);
drawvec clip_lines(drawvec &geom, int z, long long buffer);
drawvec stairstep(drawvec &geom, int z, int detail);
bool point_within_tile(long long x, long long y, int z);
int quick_check(long long *bbox, int z, long long buffer);
int quick_check(const long long *bbox, int z, long long buffer);
drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool mark_tile_bounds, double simplification, size_t retain, drawvec const &shared_nodes, struct node *shared_nodes_map, size_t nodepos);
drawvec reorder_lines(drawvec &geom);
drawvec fix_polygon(drawvec &geom);
drawvec reorder_lines(const drawvec &geom);
drawvec fix_polygon(const drawvec &geom);
std::vector<drawvec> chop_polygon(std::vector<drawvec> &geoms);
void check_polygon(drawvec &geom);
double get_area(const drawvec &geom, size_t i, size_t j);
+76 -46
View File
@@ -10,6 +10,15 @@
#define BUFFER 10000
struct string {
char *buf;
size_t n;
size_t nalloc;
};
static void string_init(struct string *s);
static void string_free(struct string *s);
json_pull *json_begin(ssize_t (*read)(struct json_pull *, char *buffer, size_t n), void *source) {
json_pull *j = malloc(sizeof(json_pull));
if (j == NULL) {
@@ -33,6 +42,13 @@ json_pull *json_begin(ssize_t (*read)(struct json_pull *, char *buffer, size_t n
exit(EXIT_FAILURE);
}
j->number_buffer = malloc(sizeof(struct string));
if (j->number_buffer == NULL) {
perror("Out of memory");
exit(EXIT_FAILURE);
}
string_init(j->number_buffer);
return j;
}
@@ -88,6 +104,9 @@ json_pull *json_begin_string(const char *s) {
}
void json_end(json_pull *p) {
string_free(p->number_buffer);
free(p->number_buffer);
json_free(p->root);
free(p->buffer);
free(p);
@@ -215,12 +234,6 @@ json_object *json_hash_get(json_object *o, const char *s) {
return NULL;
}
struct string {
char *buf;
size_t n;
size_t nalloc;
};
static void string_init(struct string *s) {
s->nalloc = 500;
s->buf = malloc(s->nalloc);
@@ -292,9 +305,6 @@ json_object *json_read_separators(json_pull *j, json_separator_callback cb, void
}
again:
/////////////////////////// Whitespace
do {
c = read_wrap(j);
if (c == EOF) {
if (j->container != NULL) {
@@ -304,8 +314,10 @@ again:
return NULL;
}
// Byte-order mark
if (c == 0xEF) {
switch (c) {
/////////////////////////// Byte order mark
case 0xEF: {
int c2 = peek(j);
if (c2 == 0xBB) {
c2 = read_wrap(j);
@@ -313,17 +325,25 @@ again:
if (c2 == 0xBF) {
c2 = read_wrap(j);
c = ' ';
continue;
goto again;
}
}
j->error = "Corrupt byte-order mark found";
return NULL;
}
} while (c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == 0x1E);
/////////////////////////// Whitespace
case ' ':
case '\t':
case '\r':
case '\n':
case 0x1E:
goto again;
/////////////////////////// Arrays
if (c == '[') {
case '[': {
json_object *o = add_object(j, JSON_ARRAY);
if (o == NULL) {
return NULL;
@@ -336,7 +356,9 @@ again:
}
goto again;
} else if (c == ']') {
}
case ']': {
if (j->container == NULL) {
j->error = "Found ] at top level";
return NULL;
@@ -361,7 +383,7 @@ again:
/////////////////////////// Hashes
if (c == '{') {
case '{': {
json_object *o = add_object(j, JSON_HASH);
if (o == NULL) {
return NULL;
@@ -374,7 +396,9 @@ again:
}
goto again;
} else if (c == '}') {
}
case '}': {
if (j->container == NULL) {
j->error = "Found } at top level";
return NULL;
@@ -399,7 +423,7 @@ again:
/////////////////////////// Null
if (c == 'n') {
case 'n': {
if (read_wrap(j) != 'u' || read_wrap(j) != 'l' || read_wrap(j) != 'l') {
j->error = "Found misspelling of null";
return NULL;
@@ -410,7 +434,7 @@ again:
/////////////////////////// NaN
if (c == 'N') {
case 'N': {
if (read_wrap(j) != 'a' || read_wrap(j) != 'N') {
j->error = "Found misspelling of NaN";
return NULL;
@@ -422,7 +446,7 @@ again:
/////////////////////////// Infinity
if (c == 'I') {
case 'I': {
if (read_wrap(j) != 'n' || read_wrap(j) != 'f' || read_wrap(j) != 'i' ||
read_wrap(j) != 'n' || read_wrap(j) != 'i' || read_wrap(j) != 't' ||
read_wrap(j) != 'y') {
@@ -436,7 +460,7 @@ again:
/////////////////////////// True
if (c == 't') {
case 't': {
if (read_wrap(j) != 'r' || read_wrap(j) != 'u' || read_wrap(j) != 'e') {
j->error = "Found misspelling of true";
return NULL;
@@ -447,7 +471,7 @@ again:
/////////////////////////// False
if (c == 'f') {
case 'f': {
if (read_wrap(j) != 'a' || read_wrap(j) != 'l' || read_wrap(j) != 's' || read_wrap(j) != 'e') {
j->error = "Found misspelling of false";
return NULL;
@@ -458,7 +482,7 @@ again:
/////////////////////////// Comma
if (c == ',') {
case ',': {
if (j->container != NULL) {
if (j->container->expect != JSON_COMMA) {
j->error = "Found unexpected comma";
@@ -481,7 +505,7 @@ again:
/////////////////////////// Colon
if (c == ':') {
case ':': {
if (j->container == NULL) {
j->error = "Found colon at top level";
return NULL;
@@ -503,69 +527,78 @@ again:
/////////////////////////// Numbers
if (c == '-' || (c >= '0' && c <= '9')) {
struct string val;
string_init(&val);
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': {
j->number_buffer->n = 0;
int decimal = 0;
if (c == '-') {
string_append(&val, c);
string_append(j->number_buffer, c);
c = read_wrap(j);
}
if (c == '0') {
string_append(&val, c);
string_append(j->number_buffer, c);
} else if (c >= '1' && c <= '9') {
string_append(&val, c);
string_append(j->number_buffer, c);
c = peek(j);
while (c >= '0' && c <= '9') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
c = peek(j);
}
}
if (peek(j) == '.') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
decimal = 1;
c = peek(j);
if (c < '0' || c > '9') {
j->error = "Decimal point without digits";
string_free(&val);
string_free(j->number_buffer);
return NULL;
}
while (c >= '0' && c <= '9') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
c = peek(j);
}
}
c = peek(j);
if (c == 'e' || c == 'E') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
decimal = 1;
c = peek(j);
if (c == '+' || c == '-') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
}
c = peek(j);
if (c < '0' || c > '9') {
j->error = "Exponent without digits";
string_free(&val);
string_free(j->number_buffer);
return NULL;
}
while (c >= '0' && c <= '9') {
string_append(&val, read_wrap(j));
string_append(j->number_buffer, read_wrap(j));
c = peek(j);
}
}
json_object *n = add_object(j, JSON_NUMBER);
if (n != NULL) {
n->value.number.number = atof(val.buf);
n->value.number.number = atof(j->number_buffer->buf);
n->value.number.large_signed = 0;
n->value.number.large_unsigned = 0;
@@ -575,7 +608,7 @@ again:
if (!decimal && n->value.number.number > MAX_SAFE_INTEGER) {
errno = 0;
char *err = NULL;
unsigned long long ull = strtoull(val.buf, &err, 10);
unsigned long long ull = strtoull(j->number_buffer->buf, &err, 10);
if (errno == 0 && (err == NULL || *err == '\0')) {
n->value.number.large_unsigned = ull;
}
@@ -583,22 +616,18 @@ again:
if (!decimal && n->value.number.number < MIN_SAFE_INTEGER) {
errno = 0;
char *err = NULL;
long long ll = strtoll(val.buf, &err, 10);
long long ll = strtoll(j->number_buffer->buf, &err, 10);
if (errno == 0 && (err == NULL || *err == '\0')) {
n->value.number.large_signed = ll;
}
}
string_free(&val);
} else {
string_free(&val);
}
return n;
}
/////////////////////////// Strings
if (c == '"') {
case '"': {
struct string val;
string_init(&val);
@@ -731,6 +760,7 @@ again:
}
return s;
}
}
j->error = "Found unexpected character";
return NULL;
+2
View File
@@ -68,6 +68,8 @@ typedef struct json_pull {
json_object *container;
json_object *root;
struct string *number_buffer;
} json_pull;
json_pull *json_begin_file(FILE *f);
+8 -8
View File
@@ -67,6 +67,7 @@
#include "read_json.hpp"
#include "sort.hpp"
#include "attribute.hpp"
#include "thread.hpp"
static int low_detail = 12;
static int full_detail = -1;
@@ -518,7 +519,7 @@ void do_read_parallel(char *map, long long len, long long initial_offset, const
}
for (size_t i = 0; i < CPUS; i++) {
if (pthread_create(&pthreads[i], NULL, run_parse_json, &pja[i]) != 0) {
if (thread_create(&pthreads[i], NULL, run_parse_json, &pja[i]) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
@@ -735,7 +736,7 @@ void start_parsing(int fd, STREAM *fp, long long offset, long long len, std::ato
rpa->want_dist = want_dist;
rpa->filters = filters;
if (pthread_create(parallel_parser, NULL, run_read_parallel, rpa) != 0) {
if (thread_create(parallel_parser, NULL, run_read_parallel, rpa) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
@@ -931,7 +932,7 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split
}
for (size_t a = 0; a < CPUS; a++) {
if (pthread_create(&pthreads[a], NULL, run_sort, &args[a]) != 0) {
if (thread_create(&pthreads[a], NULL, run_sort, &args[a]) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
@@ -1335,7 +1336,8 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
// To distinguish a null value
{
struct stringpool p;
memfile_write(r->treefile, &p, sizeof(struct stringpool));
bool in_memory;
memfile_write(r->treefile, &p, sizeof(struct stringpool), in_memory);
}
r->file_bbox[0] = r->file_bbox[1] = UINT_MAX;
@@ -2896,10 +2898,8 @@ void set_attribute_value(const char *arg) {
exit(EXIT_JSON);
}
serial_val val;
stringify_value(v, val.type, val.s, "json", 1, o);
set_attributes.insert(std::pair<std::string, serial_val>(k->value.string.string, val));
serial_val val = stringify_value(v, "json", 1, o);
set_attributes.emplace(k->value.string.string, val);
}
json_free(o);
+9 -15
View File
@@ -101,19 +101,6 @@ sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable) {
return outdb;
}
unsigned long long fnv1a(std::string const &s) {
// Store tiles by a hash of their contents (fnv1a 64-bit)
// http://www.isthe.com/chongo/tech/comp/fnv/
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
unsigned long long h = fnv_offset_basis;
for (size_t i = 0; i < s.size(); i++) {
h ^= (unsigned char) s[i];
h *= fnv_prime;
}
return h;
}
void mbtiles_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size) {
std::string hash = std::to_string(fnv1a(std::string(data, size)));
@@ -930,11 +917,18 @@ void add_to_tilestats(std::map<std::string, tilestat> &tilestats, std::string co
auto pt = std::lower_bound(tsa->second.sample_values.begin(), tsa->second.sample_values.end(), val);
if (pt == tsa->second.sample_values.end() || *pt != val) { // not found
if (tsa->second.sample_values.size() >= max_tilestats_sample_values) {
if (pt == tsa->second.sample_values.end()) {
// insertion point would be at the end,
// and the list is already full, so do nothing
} else {
// bump the former last value, insert this one
tsa->second.sample_values.insert(pt, val);
if (tsa->second.sample_values.size() > max_tilestats_sample_values) {
tsa->second.sample_values.pop_back();
}
} else {
tsa->second.sample_values.insert(pt, val);
}
}
tsa->second.type |= (1 << val.type);
-2
View File
@@ -78,6 +78,4 @@ std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::
void add_to_tilestats(std::map<std::string, tilestat> &tilestats, std::string const &layername, serial_val const &val);
unsigned long long fnv1a(std::string const &s);
#endif
+3 -1
View File
@@ -49,10 +49,11 @@ int memfile_close(struct memfile *file) {
return 0;
}
int memfile_write(struct memfile *file, void *s, long long len) {
int memfile_write(struct memfile *file, void *s, long long len, bool &in_memory) {
// If it is full, append to the file.
// If it is not full yet, append to the string in memory.
in_memory = false;
if (file->fp != NULL) {
if (fwrite(s, sizeof(char), len, file->fp) != (size_t) len) {
return 0;
@@ -61,6 +62,7 @@ int memfile_write(struct memfile *file, void *s, long long len) {
} else {
file->map.append(std::string((char *) s, len));
file->off += len;
in_memory = true;
}
return len;
+1 -1
View File
@@ -15,7 +15,7 @@ struct memfile {
struct memfile *memfile_open(int fd);
int memfile_close(struct memfile *file);
int memfile_write(struct memfile *file, void *s, long long len);
int memfile_write(struct memfile *file, void *s, long long len, bool &in_memory);
void memfile_full(struct memfile *file);
#endif
+31 -34
View File
@@ -15,6 +15,7 @@
#include "milo/dtoa_milo.h"
#include "errors.hpp"
#include "serial.hpp"
#include "text.hpp"
mvt_geometry::mvt_geometry(int nop, long long nx, long long ny) {
this->op = nop;
@@ -307,10 +308,14 @@ struct sorted_value {
bool operator<(const sorted_value &sv) const {
if (val < sv.val) {
return true;
} else {
return false;
} else if (val == sv.val) {
if (orig < sv.orig) {
return true;
}
}
return false;
}
};
std::string mvt_tile::encode() {
@@ -376,9 +381,18 @@ std::string mvt_tile::encode() {
std::vector<size_t> mapping;
mapping.resize(sorted_values.size());
size_t value_index = 0;
for (size_t v = 0; v < sorted_values.size(); v++) {
mapping[sorted_values[v].orig] = v;
mapping[sorted_values[v].orig] = value_index;
layer_writer.add_message(4, sorted_values[v].val);
// crunch out duplicates that were missed by the hashing
while (v + 1 < sorted_values.size() && sorted_values[v].val == sorted_values[v + 1].val) {
mapping[sorted_values[v + 1].orig] = value_index;
v++;
}
value_index++;
}
for (size_t f = 0; f < layers[i].features.size(); f++) {
@@ -592,41 +606,23 @@ std::string mvt_value::toString() const {
}
void mvt_layer::tag(mvt_feature &feature, std::string const &key, mvt_value const &value) {
size_t ko, vo;
// initialize lazily the first time anyone tags an attribute
// to save the time of doing it in decode, which never actually matters.
// only tile writers actually need this.
if (key_map.size() == 0) {
for (size_t i = 0; i < keys.size(); i++) {
key_map.emplace(keys[i], i);
}
for (size_t i = 0; i < values.size(); i++) {
value_map.emplace(values[i], i);
}
}
std::unordered_map<std::string, size_t>::iterator ki = key_map.find(key);
std::unordered_map<mvt_value, size_t>::iterator vi = value_map.find(value);
if (ki == key_map.end()) {
ko = keys.size();
size_t key_hash = fnv1a(key) % key_dedup.size();
if (key_dedup[key_hash] >= 0 &&
keys[key_dedup[key_hash]] == key) {
} else {
key_dedup[key_hash] = keys.size();
keys.push_back(key);
key_map.emplace(key, ko);
} else {
ko = ki->second;
}
feature.tags.push_back(key_dedup[key_hash]);
if (vi == value_map.end()) {
vo = values.size();
size_t value_hash = std::hash<mvt_value>()(value) % value_dedup.size();
if (value_dedup[value_hash] >= 0 &&
values[value_dedup[value_hash]] == value) {
} else {
value_dedup[value_hash] = values.size();
values.push_back(value);
value_map.emplace(value, vo);
} else {
vo = vi->second;
}
feature.tags.push_back(ko);
feature.tags.push_back(vo);
feature.tags.push_back(value_dedup[value_hash]);
}
bool is_integer(const char *s, long long *v) {
@@ -705,8 +701,9 @@ bool is_unsigned_integer(const char *s, unsigned long long *v) {
// the type (int, uint, sint, float, or double) that will give the
// smallest representation in the tile without losing precision,
// regardless of how the value was represented in the original source.
mvt_value stringified_to_mvt_value(int type, const char *s) {
mvt_value stringified_to_mvt_value(int type, const char *s, std::shared_ptr<std::string> const &tile_stringpool) {
mvt_value tv;
tv.s = tile_stringpool;
switch (type) {
case mvt_double: {
+12 -11
View File
@@ -11,6 +11,7 @@
#include <memory>
#include "errors.hpp"
#include "text.hpp"
struct mvt_value;
struct mvt_layer;
@@ -132,28 +133,28 @@ struct std::hash<mvt_value> {
std::size_t operator()(const mvt_value &k) const {
switch (k.type) {
case mvt_string:
return std::hash<std::string_view>()(k.get_string_view());
return fnv1a(k.c_str(), 0);
case mvt_float:
return std::hash<float>()(k.numeric_value.float_value);
return fnv1a(sizeof(float), (void *) &k.numeric_value.float_value);
case mvt_double:
return std::hash<double>()(k.numeric_value.double_value);
return fnv1a(sizeof(double), (void *) &k.numeric_value.double_value);
case mvt_int:
return std::hash<long long>()(k.numeric_value.int_value);
return fnv1a(sizeof(long long), (void *) &k.numeric_value.int_value);
case mvt_uint:
return std::hash<unsigned long long>()(k.numeric_value.uint_value);
return fnv1a(sizeof(unsigned long long), (void *) &k.numeric_value.uint_value);
case mvt_sint:
return std::hash<long long>()(k.numeric_value.sint_value);
return fnv1a(sizeof(long long), (void *) &k.numeric_value.sint_value);
case mvt_bool:
return std::hash<bool>()(k.numeric_value.bool_value);
return fnv1a(sizeof(bool), (void *) &k.numeric_value.bool_value);
case mvt_null:
return std::hash<int>()(k.numeric_value.null_value);
return fnv1a(sizeof(int), (void *) &k.numeric_value.null_value);
default:
fprintf(stderr, "mvt_value hash can't happen\n");
@@ -174,8 +175,8 @@ struct mvt_layer {
void tag(mvt_feature &feature, std::string const &key, mvt_value const &value);
// For tracking the key-value constants already used in this layer
std::unordered_map<std::string, size_t> key_map{};
std::unordered_map<mvt_value, size_t> value_map{};
std::vector<ssize_t> key_dedup = std::vector<ssize_t>(65536, -1);
std::vector<ssize_t> value_dedup = std::vector<ssize_t>(65536, -1);
};
struct mvt_tile {
@@ -190,7 +191,7 @@ int decompress(std::string const &input, std::string &output);
int compress(std::string const &input, std::string &output, bool gz);
int dezig(unsigned n);
mvt_value stringified_to_mvt_value(int type, const char *s);
mvt_value stringified_to_mvt_value(int type, const char *s, std::shared_ptr<std::string> const &tile_stringpool);
long long mvt_value_to_long_long(mvt_value const &v);
bool is_integer(const char *s, long long *v);
+10 -21
View File
@@ -25,6 +25,7 @@
#include "geometry.hpp"
#include "serial.hpp"
#include "errors.hpp"
#include "thread.hpp"
extern "C" {
#include "jsonpull/jsonpull.h"
@@ -87,6 +88,7 @@ static std::vector<mvt_geometry> to_feature(drawvec &geom) {
// Reads from the postfilter
std::vector<mvt_layer> parse_layers(int fd, int z, unsigned x, unsigned y, std::vector<std::map<std::string, layermap_entry>> *layermaps, size_t tiling_seg, std::vector<std::vector<std::string>> *layer_unmaps, int extent) {
std::map<std::string, mvt_layer> ret;
std::shared_ptr<std::string> tile_stringpool = std::make_shared<std::string>();
FILE *f = fdopen(fd, "r");
if (f == NULL) {
@@ -262,23 +264,16 @@ std::vector<mvt_layer> parse_layers(int fd, int z, unsigned x, unsigned y, std::
}
for (size_t i = 0; i < properties->value.object.length; i++) {
int tp = -1;
std::string s;
stringify_value(properties->value.object.values[i], tp, s, "Filter output", jp->line, j);
serial_val sv = stringify_value(properties->value.object.values[i], "Filter output", jp->line, j);
// Nulls can be excluded here because this is the postfilter
// and it is nearly time to create the vector representation
if (tp >= 0 && tp != mvt_null) {
mvt_value v = stringified_to_mvt_value(tp, s.c_str());
if (sv.type != mvt_null) {
mvt_value v = stringified_to_mvt_value(sv.type, sv.s.c_str(), tile_stringpool);
l->second.tag(feature, std::string(properties->value.object.keys[i]->value.string.string), v);
serial_val attrib;
attrib.type = tp;
attrib.s = s;
add_to_tilestats(ts->second.tilestats, std::string(properties->value.object.keys[i]->value.string.string), attrib);
add_to_tilestats(ts->second.tilestats, std::string(properties->value.object.keys[i]->value.string.string), sv);
}
}
@@ -503,24 +498,17 @@ serial_feature parse_feature(json_pull *jp, int z, unsigned x, unsigned y, std::
}
for (size_t i = 0; i < properties->value.object.length; i++) {
serial_val v;
v.type = -1;
stringify_value(properties->value.object.values[i], v.type, v.s, "Filter output", jp->line, j);
serial_val v = stringify_value(properties->value.object.values[i], "Filter output", jp->line, j);
// Nulls can be excluded here because the expression evaluation filter
// would have already run before prefiltering
if (v.type >= 0 && v.type != mvt_null) {
if (v.type != mvt_null) {
sf.full_keys.push_back(std::string(properties->value.object.keys[i]->value.string.string));
sf.full_values.push_back(v);
serial_val attrib;
attrib.s = v.s;
attrib.type = v.type;
if (!postfilter) {
add_to_tilestats(ts->second.tilestats, std::string(properties->value.object.keys[i]->value.string.string), attrib);
add_to_tilestats(ts->second.tilestats, std::string(properties->value.object.keys[i]->value.string.string), v);
}
}
}
@@ -643,6 +631,7 @@ std::vector<mvt_layer> filter_layers(const char *filter, std::vector<mvt_layer>
wa.extent = extent;
pthread_t writer;
// this does need to be a real thread, so we can pipe both to and from it
if (pthread_create(&writer, NULL, run_writer, &wa) != 0) {
perror("pthread_create (filter writer)");
exit(EXIT_PTHREAD);
+45 -32
View File
@@ -7,32 +7,33 @@
#include "memfile.hpp"
#include "pool.hpp"
#include "errors.hpp"
#include "text.hpp"
int swizzlecmp(const char *a, const char *b) {
ssize_t alen = strlen(a);
ssize_t blen = strlen(b);
if (strcmp(a, b) == 0) {
return 0;
}
long long hash1 = 0, hash2 = 0;
for (ssize_t i = alen - 1; i >= 0; i--) {
hash1 = (hash1 * 37 + a[i]) & INT_MAX;
}
for (ssize_t i = blen - 1; i >= 0; i--) {
hash2 = (hash2 * 37 + b[i]) & INT_MAX;
}
int h1 = hash1, h2 = hash2;
if (h1 == h2) {
inline int swizzlecmp(const char *a, int atype, unsigned long long ahash, const char *b, int btype, unsigned long long bhash) {
if (ahash == bhash) {
if (atype == btype) {
return strcmp(a, b);
} else {
return atype - btype;
}
} else {
return (int) ahash - (int) bhash;
}
}
return h1 - h2;
long long addpool(struct memfile *poolfile, struct memfile *treefile, const char *s, char type, std::vector<ssize_t> &dedup) {
unsigned long long hash = fnv1a(s, type);
size_t hash_off = hash % dedup.size();
if (dedup[hash_off] >= 0 &&
poolfile->map[dedup[hash_off]] == type &&
strcmp(poolfile->map.c_str() + dedup[hash_off] + 1, s) == 0) {
// printf("hit for %s\n", s);
return dedup[hash_off];
} else {
// printf("miss for %s\n", s);
}
long long addpool(struct memfile *poolfile, struct memfile *treefile, const char *s, char type) {
unsigned long *sp = &treefile->tree;
size_t depth = 0;
@@ -43,17 +44,17 @@ long long addpool(struct memfile *poolfile, struct memfile *treefile, const char
}
while (*sp != 0) {
int cmp = swizzlecmp(s, poolfile->map.c_str() + ((struct stringpool *) (treefile->map.c_str() + *sp))->off + 1);
if (cmp == 0) {
cmp = type - (poolfile->map.c_str() + ((struct stringpool *) (treefile->map.c_str() + *sp))->off)[0];
}
int cmp = swizzlecmp(s, type, hash,
poolfile->map.c_str() + ((struct stringpool *) (treefile->map.c_str() + *sp))->off + 1,
(poolfile->map.c_str() + ((struct stringpool *) (treefile->map.c_str() + *sp))->off)[0],
((struct stringpool *) (treefile->map.c_str() + *sp))->hash);
if (cmp < 0) {
sp = &(((struct stringpool *) (treefile->map.c_str() + *sp))->left);
} else if (cmp > 0) {
sp = &(((struct stringpool *) (treefile->map.c_str() + *sp))->right);
} else {
dedup[hash_off] = ((struct stringpool *) (treefile->map.c_str() + *sp))->off;
return ((struct stringpool *) (treefile->map.c_str() + *sp))->off;
}
@@ -65,14 +66,20 @@ long long addpool(struct memfile *poolfile, struct memfile *treefile, const char
// the pool is full yet.
long long off = poolfile->off;
if (memfile_write(poolfile, &type, 1) < 0) {
bool in_memory = false;
if (memfile_write(poolfile, &type, 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
if (memfile_write(poolfile, (void *) s, strlen(s) + 1) < 0) {
if (memfile_write(poolfile, (void *) s, strlen(s) + 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
if (in_memory) {
dedup[hash_off] = off;
}
return off;
}
}
@@ -95,11 +102,12 @@ long long addpool(struct memfile *poolfile, struct memfile *treefile, const char
// to the newly-added strings.
long long off = poolfile->off;
if (memfile_write(poolfile, &type, 1) < 0) {
bool in_memory;
if (memfile_write(poolfile, &type, 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
if (memfile_write(poolfile, (void *) s, strlen(s) + 1) < 0) {
if (memfile_write(poolfile, (void *) s, strlen(s) + 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
@@ -115,14 +123,18 @@ long long addpool(struct memfile *poolfile, struct memfile *treefile, const char
}
long long off = poolfile->off;
if (memfile_write(poolfile, &type, 1) < 0) {
bool in_memory = false;
if (memfile_write(poolfile, &type, 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
if (memfile_write(poolfile, (void *) s, strlen(s) + 1) < 0) {
if (memfile_write(poolfile, (void *) s, strlen(s) + 1, in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
if (in_memory) {
dedup[hash_off] = off;
}
if (off >= LONG_MAX || treefile->off >= LONG_MAX) {
// Tree or pool is bigger than 2GB
@@ -138,9 +150,10 @@ long long addpool(struct memfile *poolfile, struct memfile *treefile, const char
tsp.left = 0;
tsp.right = 0;
tsp.off = off;
tsp.hash = hash;
long long p = treefile->off;
if (memfile_write(treefile, &tsp, sizeof(struct stringpool)) < 0) {
if (memfile_write(treefile, &tsp, sizeof(struct stringpool), in_memory) < 0) {
perror("memfile write");
exit(EXIT_WRITE);
}
+3 -1
View File
@@ -4,9 +4,11 @@
struct stringpool {
unsigned long left = 0;
unsigned long right = 0;
unsigned long off = 0;
size_t hash; // hash of the string at this node
};
long long addpool(struct memfile *poolfile, struct memfile *treefile, const char *s, char type);
long long addpool(struct memfile *poolfile, struct memfile *treefile, const char *s, char type, std::vector<ssize_t> &dedup);
#endif
+32 -37
View File
@@ -13,6 +13,7 @@
#include "mvt.hpp"
#include "milo/dtoa_milo.h"
#include "errors.hpp"
#include "serial.hpp"
const char *geometry_names[GEOM_TYPES] = {
"Point",
@@ -120,54 +121,48 @@ void parse_geometry(int t, json_object *j, drawvec &out, int op, const char *fna
// type and stringified value. All numeric values, even if they are integers,
// even integers that are too large to fit in a double but will still be
// stringified with their original precision, are recorded here as mvt_double.
void stringify_value(json_object *value, int &type, std::string &stringified, const char *reading, int line, json_object *feature) {
serial_val stringify_value(json_object *value, const char *reading, int line, json_object *feature) {
serial_val sv;
if (value != NULL) {
int vt = value->type;
std::string val;
if (vt == JSON_STRING) {
val = value->value.string.string;
} else if (vt == JSON_NUMBER) {
if (value->value.number.large_unsigned != 0) {
val = std::to_string(value->value.number.large_unsigned);
} else if (value->value.number.large_signed != 0) {
val = std::to_string(value->value.number.large_signed);
} else {
val = milo::dtoa_milo(value->value.number.number);
}
} else if (vt == JSON_TRUE) {
val = "true";
} else if (vt == JSON_FALSE) {
val = "false";
} else if (vt == JSON_NULL) {
val = "null";
} else {
const char *v = json_stringify(value);
val = std::string(v);
free((void *) v); // stringify
}
sv.type = mvt_string;
sv.s = value->value.string.string;
if (vt == JSON_STRING) {
type = mvt_string;
stringified = val;
std::string err = check_utf8(val);
if (err != "") {
std::string err = check_utf8(sv.s);
if (err.size() > 0) {
fprintf(stderr, "%s:%d: %s: ", reading, line, err.c_str());
json_context(feature);
exit(EXIT_UTF8);
}
} else if (vt == JSON_NUMBER) {
type = mvt_double;
stringified = val;
} else if (vt == JSON_TRUE || vt == JSON_FALSE) {
type = mvt_bool;
stringified = val;
} else if (vt == JSON_NULL) {
type = mvt_null;
stringified = "null";
sv.type = mvt_double;
if (value->value.number.large_unsigned != 0) {
sv.s = std::to_string(value->value.number.large_unsigned);
} else if (value->value.number.large_signed != 0) {
sv.s = std::to_string(value->value.number.large_signed);
} else {
type = mvt_string;
stringified = val;
sv.s = milo::dtoa_milo(value->value.number.number);
}
} else if (vt == JSON_TRUE) {
sv.type = mvt_bool;
sv.s = "true";
} else if (vt == JSON_FALSE) {
sv.type = mvt_bool;
sv.s = "false";
} else if (vt == JSON_NULL) {
sv.type = mvt_null;
sv.s = "null";
} else {
sv.type = mvt_string;
const char *v = json_stringify(value);
sv.s = std::string(v);
free((void *) v); // stringify
}
}
return sv;
}
+1 -1
View File
@@ -13,4 +13,4 @@ extern int mb_geometry[GEOM_TYPES];
void json_context(json_object *j);
void parse_geometry(int t, json_object *j, drawvec &out, int op, const char *fname, int line, json_object *feature);
void stringify_value(json_object *value, int &type, std::string &stringified, const char *reading, int line, json_object *feature);
serial_val stringify_value(json_object *value, const char *reading, int line, json_object *feature);
+37 -47
View File
@@ -52,25 +52,16 @@ void serialize_long_long(FILE *out, long long n, std::atomic<long long> *fpos, c
}
void serialize_ulong_long(FILE *out, unsigned long long zigzag, std::atomic<long long> *fpos, const char *fname) {
while (1) {
unsigned char b = zigzag & 0x7F;
if ((zigzag >> 7) != 0) {
b |= 0x80;
if (putc(b, out) == EOF) {
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
exit(EXIT_WRITE);
}
*fpos += 1;
char buf[10]; // ceil(64 / 7)
char *s = buf;
while (zigzag >= 0x80) {
*s++ = (zigzag & 0x7F) | 0x80;
zigzag >>= 7;
} else {
if (putc(b, out) == EOF) {
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
exit(EXIT_WRITE);
}
*fpos += 1;
break;
}
}
*s++ = zigzag;
fwrite_check(buf, sizeof(char), s - buf, out, fpos, fname);
}
void serialize_byte(FILE *out, signed char n, std::atomic<long long> *fpos, const char *fname) {
@@ -89,17 +80,16 @@ size_t fwrite_check(const void *ptr, size_t size, size_t nitems, std::string &st
}
void serialize_ulong_long(std::string &out, unsigned long long zigzag) {
while (1) {
unsigned char b = zigzag & 0x7F;
if ((zigzag >> 7) != 0) {
b |= 0x80;
out += b;
char buf[10]; // ceil(64 / 7)
char *s = buf;
while (zigzag >= 0x80) {
*s++ = (zigzag & 0x7F) | 0x80;
zigzag >>= 7;
} else {
out += b;
break;
}
}
*s++ = zigzag;
out.append(buf, s - buf);
}
void serialize_long_long(std::string &out, long long n) {
@@ -122,43 +112,43 @@ void serialize_uint(std::string &out, unsigned n) {
// read from memory
void deserialize_int(char **f, int *n) {
void deserialize_int(const char **f, int *n) {
long long ll;
deserialize_long_long(f, &ll);
*n = ll;
}
void deserialize_long_long(char **f, long long *n) {
void deserialize_long_long(const char **f, long long *n) {
unsigned long long zigzag = 0;
deserialize_ulong_long(f, &zigzag);
*n = protozero::decode_zigzag64(zigzag);
}
void deserialize_ulong_long(char **f, unsigned long long *zigzag) {
void deserialize_ulong_long(const char **f, unsigned long long *zigzag) {
*zigzag = 0;
int shift = 0;
while (1) {
if ((**f & 0x80) == 0) {
*zigzag |= ((unsigned long long) **f) << shift;
*zigzag |= ((const unsigned long long) **f) << shift;
*f += 1;
shift += 7;
break;
} else {
*zigzag |= ((unsigned long long) (**f & 0x7F)) << shift;
*zigzag |= ((const unsigned long long) (**f & 0x7F)) << shift;
*f += 1;
shift += 7;
}
}
}
void deserialize_uint(char **f, unsigned *n) {
void deserialize_uint(const char **f, unsigned *n) {
unsigned long long v;
deserialize_ulong_long(f, &v);
*n = v;
}
void deserialize_byte(char **f, signed char *n) {
void deserialize_byte(const char **f, signed char *n) {
memcpy(n, *f, sizeof(signed char));
*f += sizeof(signed char);
}
@@ -199,15 +189,15 @@ std::string serialize_feature(serial_feature *sf, long long wx, long long wy) {
layer |= (sf->index != 0) << FLAG_INDEX;
layer |= (sf->extent != 0) << FLAG_EXTENT;
layer |= sf->has_id << FLAG_ID;
layer |= sf->has_tippecanoe_minzoom << FLAG_MINZOOM;
layer |= sf->has_tippecanoe_maxzoom << FLAG_MAXZOOM;
layer |= (sf->tippecanoe_minzoom != -1) << FLAG_MINZOOM;
layer |= (sf->tippecanoe_maxzoom != -1) << FLAG_MAXZOOM;
serialize_long_long(s, layer);
serialize_long_long(s, sf->seq);
if (sf->has_tippecanoe_minzoom) {
if (sf->tippecanoe_minzoom != -1) {
serialize_int(s, sf->tippecanoe_minzoom);
}
if (sf->has_tippecanoe_maxzoom) {
if (sf->tippecanoe_maxzoom != -1) {
serialize_int(s, sf->tippecanoe_maxzoom);
}
if (sf->has_id) {
@@ -240,9 +230,9 @@ std::string serialize_feature(serial_feature *sf, long long wx, long long wy) {
return s;
}
serial_feature deserialize_feature(std::string &geoms, unsigned z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y) {
serial_feature deserialize_feature(std::string const &geoms, unsigned z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y) {
serial_feature sf;
char *cp = (char *) geoms.c_str();
const char *cp = geoms.c_str();
deserialize_byte(&cp, &sf.t);
deserialize_long_long(&cp, &sf.layer);
@@ -419,7 +409,7 @@ static void add_scaled_node(struct reader *r, serialization_state *sst, draw g)
}
// called from frontends
int serialize_feature(struct serialization_state *sst, serial_feature &sf) {
int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::string const &layername) {
struct reader *r = &(*sst->readers)[sst->segment];
sf.bbox[0] = LLONG_MAX;
@@ -725,11 +715,11 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) {
sf.index = 0;
}
if (sst->layermap->count(sf.layername) == 0) {
sst->layermap->insert(std::pair<std::string, layermap_entry>(sf.layername, layermap_entry(sst->layermap->size())));
if (sst->layermap->count(layername) == 0) {
sst->layermap->emplace(layername, layermap_entry(sst->layermap->size()));
}
auto ai = sst->layermap->find(sf.layername);
auto ai = sst->layermap->find(layername);
if (ai != sst->layermap->end()) {
sf.layer = ai->second.id;
@@ -743,7 +733,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) {
}
}
} else {
fprintf(stderr, "Internal error: can't find layer name %s\n", sf.layername.c_str());
fprintf(stderr, "Internal error: can't find layer name %s\n", layername.c_str());
exit(EXIT_IMPOSSIBLE);
}
@@ -827,14 +817,14 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) {
if (!sst->filters) {
for (size_t i = 0; i < sf.full_keys.size(); i++) {
auto ts = sst->layermap->find(sf.layername);
auto ts = sst->layermap->find(layername);
add_to_tilestats(ts->second.tilestats, sf.full_keys[i], sf.full_values[i]);
}
}
for (size_t i = 0; i < sf.full_keys.size(); i++) {
sf.keys.push_back(addpool(r->poolfile, r->treefile, sf.full_keys[i].c_str(), mvt_string));
sf.values.push_back(addpool(r->poolfile, r->treefile, sf.full_values[i].s.c_str(), sf.full_values[i].type));
sf.keys.push_back(addpool(r->poolfile, r->treefile, sf.full_keys[i].c_str(), mvt_string, r->key_dedup));
sf.values.push_back(addpool(r->poolfile, r->treefile, sf.full_values[i].s.c_str(), sf.full_values[i].type, r->value_dedup));
}
long long geomstart = r->geompos;
+58 -22
View File
@@ -25,22 +25,30 @@ void serialize_ulong_long(std::string &out, unsigned long long n);
void serialize_byte(std::string &out, signed char n);
void serialize_uint(std::string &out, unsigned n);
void deserialize_int(char **f, int *n);
void deserialize_long_long(char **f, long long *n);
void deserialize_ulong_long(char **f, unsigned long long *n);
void deserialize_uint(char **f, unsigned *n);
void deserialize_byte(char **f, signed char *n);
void deserialize_int(const char **f, int *n);
void deserialize_long_long(const char **f, long long *n);
void deserialize_ulong_long(const char **f, unsigned long long *n);
void deserialize_uint(const char **f, unsigned *n);
void deserialize_byte(const char **f, signed char *n);
// This is the main representation of attribute values in memory and
// in the string pool. The type is one of the mvt_value type (mvt_string,
// mvt_double, mvt_bool, or mvt_null). Note that all numeric values,
// whether integer or floating point, use mvt_double here.
struct serial_val {
int type = 0;
std::string s = "";
int type;
std::string s;
bool operator<(const serial_val &o) const;
bool operator!=(const serial_val &o) const;
serial_val() {
type = 0;
}
serial_val(int t, const std::string &val)
: type(t), s(val) {
}
};
struct serial_feature {
@@ -54,31 +62,58 @@ struct serial_feature {
bool has_id = false;
unsigned long long id = 0;
bool has_tippecanoe_minzoom = false;
int tippecanoe_minzoom = 0;
bool has_tippecanoe_maxzoom = false;
int tippecanoe_maxzoom = 0;
int tippecanoe_minzoom = -1;
int tippecanoe_maxzoom = -1;
drawvec geometry = drawvec();
unsigned long long index = 0;
unsigned long long label_point = 0;
long long extent = 0;
// These fields are not directly serialized, but are used
// to create the keys and values references into the string pool
// during initial serialization
std::vector<std::string> full_keys{};
std::vector<serial_val> full_values{};
// These fields are generated from full_keys and full_values
// during initial serialization and then replace the string
// representations:
std::vector<long long> keys{};
std::vector<long long> values{};
// XXX This isn't serialized. Should it be here?
// These fields are used during tiling,
// but are not serialized and are not expected
// to be provided by frontends:
long long bbox[4] = {0, 0, 0, 0};
std::vector<std::string> full_keys{};
std::vector<serial_val> full_values{};
std::string layername = "";
bool dropped = false;
drawvec edge_nodes;
bool dropped = false; // was this feature dropped by rate?
drawvec edge_nodes; // what nodes at the tile edge were added during clipping?
bool reduced; // is polygon dust
bool coalesced; // was coalesced from multiple features
int line_detail; // current tile resolution being used for simplification
int extra_detail; // extra tile resolution to retain in output
int maxzoom;
double spacing; // feature spacing for --calculate-feature-density
double simplification; // simplification level at this zoom level
std::vector<ssize_t> arc_polygon; // used in --detect-shared-borders
ssize_t renamed; // used in --detect-shared-borders logic
long long clustered; // does this feature need the clustered/point_count attributes?
const char *stringpool; // string pool for keys/values lookup
std::shared_ptr<std::string> tile_stringpool; // string pool for mvt_value construction
std::set<std::string> need_tilestats;
std::unordered_map<std::string, accum_state> attribute_accum_state;
int z; // tile being produced
int tx;
int ty;
};
std::string serialize_feature(serial_feature *sf, long long wx, long long wy);
serial_feature deserialize_feature(std::string &geoms, unsigned z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y);
serial_feature deserialize_feature(std::string const &geoms, unsigned z, unsigned tx, unsigned ty, unsigned *initial_x, unsigned *initial_y);
struct reader {
int poolfd = -1;
@@ -101,14 +136,15 @@ struct reader {
std::atomic<long long> nodepos;
long long file_bbox[4] = {0, 0, 0, 0};
long long file_bbox1[4] = {0xFFFFFFFF, 0xFFFFFFFF, 0, 0}; // standard -180 to 180 world plane
long long file_bbox2[4] = {0x1FFFFFFFF, 0xFFFFFFFF, 0x100000000, 0}; // 0 to 360 world plane
struct stat geomst {};
char *geom_map = NULL;
std::vector<ssize_t> key_dedup = std::vector<ssize_t>(655536, -1);
std::vector<ssize_t> value_dedup = std::vector<ssize_t>(655536, -1);
reader()
: geompos(0), indexpos(0), vertexpos(0), nodepos(0) {
}
@@ -227,7 +263,7 @@ struct node {
int nodecmp(const void *void1, const void *void2);
int serialize_feature(struct serialization_state *sst, serial_feature &sf);
int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::string const &layername);
void coerce_value(std::string const &key, int &vt, std::string &val, std::unordered_map<std::string, int> const *attribute_types);
#endif
+575
View File
@@ -0,0 +1,575 @@
#include <stdio.h>
#include <algorithm>
#include "geometry.hpp"
#include "serial.hpp"
#include "options.hpp"
// This should all be removed and replaced with --no-simplification-of-shared-nodes
// Does not fix up moveto/lineto
static drawvec reverse_subring(drawvec const &dv) {
drawvec out;
for (size_t i = dv.size(); i > 0; i--) {
out.push_back(dv[i - 1]);
}
return out;
}
struct edge {
unsigned x1 = 0;
unsigned y1 = 0;
unsigned x2 = 0;
unsigned y2 = 0;
unsigned ring = 0;
edge(unsigned _x1, unsigned _y1, unsigned _x2, unsigned _y2, unsigned _ring) {
x1 = _x1;
y1 = _y1;
x2 = _x2;
y2 = _y2;
ring = _ring;
}
bool operator<(const edge &s) const {
long long cmp = (long long) y1 - s.y1;
if (cmp == 0) {
cmp = (long long) x1 - s.x1;
}
if (cmp == 0) {
cmp = (long long) y2 - s.y2;
}
if (cmp == 0) {
cmp = (long long) x2 - s.x2;
}
return cmp < 0;
}
};
struct edgecmp_ring {
bool operator()(const edge &a, const edge &b) {
long long cmp = (long long) a.y1 - b.y1;
if (cmp == 0) {
cmp = (long long) a.x1 - b.x1;
}
if (cmp == 0) {
cmp = (long long) a.y2 - b.y2;
}
if (cmp == 0) {
cmp = (long long) a.x2 - b.x2;
}
if (cmp == 0) {
cmp = (long long) a.ring - b.ring;
}
return cmp < 0;
}
} edgecmp_ring;
bool edges_same(std::pair<std::vector<edge>::iterator, std::vector<edge>::iterator> e1, std::pair<std::vector<edge>::iterator, std::vector<edge>::iterator> e2) {
if ((e2.second - e2.first) != (e1.second - e1.first)) {
return false;
}
while (e1.first != e1.second) {
if (e1.first->ring != e2.first->ring) {
return false;
}
++e1.first;
++e2.first;
}
return true;
}
bool find_common_edges(std::vector<serial_feature> &features, int z, int line_detail, double simplification, int maxzoom, double merge_fraction) {
size_t merge_count = ceil((1 - merge_fraction) * features.size());
for (size_t i = 0; i < features.size(); i++) {
if (features[i].t == VT_POLYGON) {
{
drawvec &g = features[i].geometry;
drawvec out;
for (size_t k = 0; k < g.size(); k++) {
if (g[k].op == VT_LINETO && k > 0 && g[k - 1] == g[k]) {
;
} else {
out.push_back(g[k]);
}
}
features[i].geometry = out;
}
}
}
// Construct a mapping from all polygon edges to the set of rings
// that each edge appears in. (The ring number is across all polygons;
// we don't need to look it back up, just to tell where it changes.)
std::vector<edge> edges;
size_t ring = 0;
for (size_t i = 0; i < features.size(); i++) {
if (features[i].t == VT_POLYGON) {
{
for (size_t k = 0; k + 1 < features[i].geometry.size(); k++) {
if (features[i].geometry[k].op == VT_MOVETO) {
ring++;
}
if (features[i].geometry[k + 1].op == VT_LINETO) {
drawvec dv;
if (features[i].geometry[k] < features[i].geometry[k + 1]) {
dv.push_back(features[i].geometry[k]);
dv.push_back(features[i].geometry[k + 1]);
} else {
dv.push_back(features[i].geometry[k + 1]);
dv.push_back(features[i].geometry[k]);
}
edges.push_back(edge(dv[0].x, dv[0].y, dv[1].x, dv[1].y, ring));
}
}
}
}
}
std::sort(edges.begin(), edges.end(), edgecmp_ring);
std::set<draw> necessaries;
// Now mark all the points where the set of rings using the edge on one side
// is not the same as the set of rings using the edge on the other side.
for (size_t i = 0; i < features.size(); i++) {
if (features[i].t == VT_POLYGON) {
{
drawvec &g = features[i].geometry;
for (size_t k = 0; k < g.size(); k++) {
g[k].necessary = 0;
}
for (size_t a = 0; a < g.size(); a++) {
if (g[a].op == VT_MOVETO) {
size_t b;
for (b = a + 1; b < g.size(); b++) {
if (g[b].op != VT_LINETO) {
break;
}
}
// -1 because of duplication at the end
size_t s = b - a - 1;
if (s > 0) {
drawvec left;
if (g[a + (s - 1) % s] < g[a]) {
left.push_back(g[a + (s - 1) % s]);
left.push_back(g[a]);
} else {
left.push_back(g[a]);
left.push_back(g[a + (s - 1) % s]);
}
if (left[1] < left[0]) {
fprintf(stderr, "left misordered\n");
}
std::pair<std::vector<edge>::iterator, std::vector<edge>::iterator> e1 = std::equal_range(edges.begin(), edges.end(), edge(left[0].x, left[0].y, left[1].x, left[1].y, 0));
for (size_t k = 0; k < s; k++) {
drawvec right;
if (g[a + k] < g[a + k + 1]) {
right.push_back(g[a + k]);
right.push_back(g[a + k + 1]);
} else {
right.push_back(g[a + k + 1]);
right.push_back(g[a + k]);
}
std::pair<std::vector<edge>::iterator, std::vector<edge>::iterator> e2 = std::equal_range(edges.begin(), edges.end(), edge(right[0].x, right[0].y, right[1].x, right[1].y, 0));
if (right[1] < right[0]) {
fprintf(stderr, "left misordered\n");
}
if (e1.first == e1.second || e2.first == e2.second) {
fprintf(stderr, "Internal error: polygon edge lookup failed for %lld,%lld to %lld,%lld or %lld,%lld to %lld,%lld\n", left[0].x, left[0].y, left[1].x, left[1].y, right[0].x, right[0].y, right[1].x, right[1].y);
exit(EXIT_IMPOSSIBLE);
}
if (!edges_same(e1, e2)) {
g[a + k].necessary = 1;
necessaries.insert(g[a + k]);
}
e1 = e2;
}
}
a = b - 1;
}
}
}
}
}
edges.clear();
std::map<drawvec, size_t> arcs;
std::multimap<ssize_t, size_t> merge_candidates; // from arc to serial_feature
// Roll rings that include a necessary point around so they start at one
for (size_t i = 0; i < features.size(); i++) {
if (features[i].t == VT_POLYGON) {
{
drawvec &g = features[i].geometry;
for (size_t k = 0; k < g.size(); k++) {
if (necessaries.count(g[k]) != 0) {
g[k].necessary = 1;
}
}
for (size_t k = 0; k < g.size(); k++) {
if (g[k].op == VT_MOVETO) {
ssize_t necessary = -1;
ssize_t lowest = k;
size_t l;
for (l = k + 1; l < g.size(); l++) {
if (g[l].op != VT_LINETO) {
break;
}
if (g[l].necessary) {
necessary = l;
}
if (g[l] < g[lowest]) {
lowest = l;
}
}
if (necessary < 0) {
necessary = lowest;
// Add a necessary marker if there was none in the ring,
// so the arc code below can find it.
g[lowest].necessary = 1;
}
{
drawvec tmp;
// l - 1 because the endpoint is duplicated
for (size_t m = necessary; m < l - 1; m++) {
tmp.push_back(g[m]);
}
for (ssize_t m = k; m < necessary; m++) {
tmp.push_back(g[m]);
}
// replace the endpoint
tmp.push_back(g[necessary]);
if (tmp.size() != l - k) {
fprintf(stderr, "internal error shifting ring\n");
exit(EXIT_IMPOSSIBLE);
}
for (size_t m = 0; m < tmp.size(); m++) {
if (m == 0) {
tmp[m].op = VT_MOVETO;
} else {
tmp[m].op = VT_LINETO;
}
g[k + m] = tmp[m];
}
}
// Now peel off each set of segments from one necessary point to the next
// into an "arc" as in TopoJSON
for (size_t m = k; m < l; m++) {
if (!g[m].necessary) {
fprintf(stderr, "internal error in arc building\n");
exit(EXIT_IMPOSSIBLE);
}
drawvec arc;
size_t n;
for (n = m; n < l; n++) {
arc.push_back(g[n]);
if (n > m && g[n].necessary) {
break;
}
}
auto f = arcs.find(arc);
if (f == arcs.end()) {
drawvec arc2 = reverse_subring(arc);
auto f2 = arcs.find(arc2);
if (f2 == arcs.end()) {
// Add new arc
size_t added = arcs.size() + 1;
arcs.insert(std::pair<drawvec, size_t>(arc, added));
features[i].arc_polygon.push_back(added);
merge_candidates.insert(std::pair<ssize_t, size_t>(added, i));
} else {
features[i].arc_polygon.push_back(-(ssize_t) f2->second);
merge_candidates.insert(std::pair<ssize_t, size_t>(-(ssize_t) f2->second, i));
}
} else {
features[i].arc_polygon.push_back(f->second);
merge_candidates.insert(std::pair<ssize_t, size_t>(f->second, i));
}
m = n - 1;
}
features[i].arc_polygon.push_back(0);
k = l - 1;
}
}
}
}
}
// Simplify each arc
std::vector<drawvec> simplified_arcs;
for (auto ai = arcs.begin(); ai != arcs.end(); ++ai) {
if (simplified_arcs.size() < ai->second + 1) {
simplified_arcs.resize(ai->second + 1);
}
drawvec dv = ai->first;
for (size_t i = 0; i < dv.size(); i++) {
if (i == 0) {
dv[i].op = VT_MOVETO;
} else {
dv[i].op = VT_LINETO;
}
}
if (!(prevent[P_SIMPLIFY] || (z == maxzoom && prevent[P_SIMPLIFY_LOW]) || (z < maxzoom && additional[A_GRID_LOW_ZOOMS]))) {
// tx and ty are 0 here because we aren't trying to do anything with the shared_nodes_map
simplified_arcs[ai->second] = simplify_lines(dv, z, 0, 0, line_detail, !(prevent[P_CLIPPING] || prevent[P_DUPLICATION]), simplification, 4, drawvec(), NULL, 0);
} else {
simplified_arcs[ai->second] = dv;
}
}
// If necessary, merge some adjacent polygons into some other polygons
struct merge_order {
ssize_t edge = 0;
unsigned long long gap = 0;
size_t p1 = 0;
size_t p2 = 0;
bool operator<(const merge_order &m) const {
return gap < m.gap;
}
};
std::vector<merge_order> order;
for (ssize_t i = 0; i < (ssize_t) simplified_arcs.size(); i++) {
auto r1 = merge_candidates.equal_range(i);
for (auto r1i = r1.first; r1i != r1.second; ++r1i) {
auto r2 = merge_candidates.equal_range(-i);
for (auto r2i = r2.first; r2i != r2.second; ++r2i) {
if (r1i->second != r2i->second) {
merge_order mo;
mo.edge = i;
if (features[r1i->second].index > features[r2i->second].index) {
mo.gap = features[r1i->second].index - features[r2i->second].index;
} else {
mo.gap = features[r2i->second].index - features[r1i->second].index;
}
mo.p1 = r1i->second;
mo.p2 = r2i->second;
order.push_back(mo);
}
}
}
}
std::sort(order.begin(), order.end());
size_t merged = 0;
for (size_t o = 0; o < order.size(); o++) {
if (merged >= merge_count) {
break;
}
size_t i = order[o].p1;
while (features[i].renamed >= 0) {
i = features[i].renamed;
}
size_t i2 = order[o].p2;
while (features[i2].renamed >= 0) {
i2 = features[i2].renamed;
}
for (size_t j = 0; j < features[i].arc_polygon.size() && merged < merge_count; j++) {
if (features[i].arc_polygon[j] == order[o].edge) {
{
// XXX snap links
if (features[order[o].p2].arc_polygon.size() > 0) {
// This has to merge the ring that contains the anti-arc to this arc
// into the current ring, and then add whatever other rings were in
// that feature on to the end.
//
// This can't be good for keeping parent-child relationships among
// the rings in order, but Wagyu should sort that out later
std::vector<ssize_t> additions;
std::vector<ssize_t> &here = features[i].arc_polygon;
std::vector<ssize_t> &other = features[i2].arc_polygon;
#if 0
printf("seeking %zd\n", features[i].arc_polygon[j]);
printf("before: ");
for (size_t k = 0; k < here.size(); k++) {
printf("%zd ", here[k]);
}
printf("\n");
printf("other: ");
for (size_t k = 0; k < other.size(); k++) {
printf("%zd ", other[k]);
}
printf("\n");
#endif
for (size_t k = 0; k < other.size(); k++) {
size_t l;
for (l = k; l < other.size(); l++) {
if (other[l] == 0) {
break;
}
}
if (l >= other.size()) {
l--;
}
#if 0
for (size_t m = k; m <= l; m++) {
printf("%zd ", other[m]);
}
printf("\n");
#endif
size_t m;
for (m = k; m <= l; m++) {
if (other[m] == -features[i].arc_polygon[j]) {
break;
}
}
if (m <= l) {
// Found the shared arc
here.erase(here.begin() + j);
size_t off = 0;
for (size_t n = m + 1; n < l; n++) {
here.insert(here.begin() + j + off, other[n]);
off++;
}
for (size_t n = k; n < m; n++) {
here.insert(here.begin() + j + off, other[n]);
off++;
}
} else {
// Looking at some other ring
for (size_t n = k; n <= l; n++) {
additions.push_back(other[n]);
}
}
k = l;
}
features[i2].arc_polygon.clear();
features[i2].renamed = i;
merged++;
for (size_t k = 0; k < additions.size(); k++) {
features[i].arc_polygon.push_back(additions[k]);
}
#if 0
printf("after: ");
for (size_t k = 0; k < here.size(); k++) {
printf("%zd ", here[k]);
}
printf("\n");
#endif
#if 0
for (size_t k = 0; k + 1 < here.size(); k++) {
if (here[k] != 0 && here[k + 1] != 0) {
if (simplified_arcs[here[k + 1]][0] != simplified_arcs[here[k]][simplified_arcs[here[k]].size() - 1]) {
printf("error from %zd to %zd\n", here[k], here[k + 1]);
}
}
}
#endif
}
}
}
}
}
// Turn the arc representations of the polygons back into standard polygon geometries
for (size_t i = 0; i < features.size(); i++) {
if (features[i].t == VT_POLYGON) {
features[i].geometry.clear();
bool at_start = true;
draw first(-1, 0, 0);
for (size_t j = 0; j < features[i].arc_polygon.size(); j++) {
ssize_t p = features[i].arc_polygon[j];
if (p == 0) {
if (first.op >= 0) {
features[i].geometry.push_back(first);
first = draw(-1, 0, 0);
}
at_start = true;
} else if (p > 0) {
for (size_t k = 0; k + 1 < simplified_arcs[p].size(); k++) {
if (at_start) {
features[i].geometry.push_back(draw(VT_MOVETO, simplified_arcs[p][k].x, simplified_arcs[p][k].y));
first = draw(VT_LINETO, simplified_arcs[p][k].x, simplified_arcs[p][k].y);
} else {
features[i].geometry.push_back(draw(VT_LINETO, simplified_arcs[p][k].x, simplified_arcs[p][k].y));
}
at_start = 0;
}
} else { /* p < 0 */
for (ssize_t k = simplified_arcs[-p].size() - 1; k > 0; k--) {
if (at_start) {
features[i].geometry.push_back(draw(VT_MOVETO, simplified_arcs[-p][k].x, simplified_arcs[-p][k].y));
first = draw(VT_LINETO, simplified_arcs[-p][k].x, simplified_arcs[-p][k].y);
} else {
features[i].geometry.push_back(draw(VT_LINETO, simplified_arcs[-p][k].x, simplified_arcs[-p][k].y));
}
at_start = 0;
}
}
}
}
}
if (merged >= merge_count) {
return true;
} else {
return false;
}
}
+1
View File
@@ -0,0 +1 @@
bool find_common_edges(std::vector<serial_feature> &features, int z, int line_detail, double simplification, int maxzoom, double merge_fraction);
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
@@ -5,7 +5,7 @@
"description": "tests/ne_110m_admin_0_countries/out/-B10_-z0_--retain-points-multiplier_10_-d8_-yNAME.json.check.mbtiles",
"format": "pbf",
"generator_options": "./tippecanoe -q -a@ -f -o tests/ne_110m_admin_0_countries/out/-B10_-z0_--retain-points-multiplier_10_-d8_-yNAME.json.check.mbtiles -B10 -z0 --retain-points-multiplier 10 -d8 -yNAME tests/ne_110m_admin_0_countries/in.json.gz",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"count\":177,\"geometry\":\"Polygon\",\"attributeCount\":0,\"attributes\":[]}]}}",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{\"tippecanoe:retain_points_multiplier_first\":\"Boolean\",\"tippecanoe:retain_points_multiplier_sequence\":\"Number\"}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"count\":177,\"geometry\":\"Polygon\",\"attributeCount\":2,\"attributes\":[{\"attribute\":\"tippecanoe:retain_points_multiplier_first\",\"count\":1,\"type\":\"boolean\",\"values\":[true]},{\"attribute\":\"tippecanoe:retain_points_multiplier_sequence\",\"count\":144,\"type\":\"number\",\"values\":[0,1,10,100,101,102,103,104,105,106,107,108,109,11,110,111,112,113,114,115,116,117,118,119,12,120,121,122,123,124,125,126,127,128,129,13,130,131,132,133,134,135,136,137,138,139,14,140,141,142,143,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32,33,34,35,36,37,38,39,4,40,41,42,43,44,45,46,47,48,49,5,50,51,52,53,54,55,56,57,58,59],\"min\":0,\"max\":143}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/ne_110m_admin_0_countries/out/-B10_-z0_--retain-points-multiplier_10_-d8_-yNAME.json.check.mbtiles",
@@ -9,7 +9,7 @@
"maxzoom": "2",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z0_-M10000_--drop-densest-as-needed_--extend-zooms-if-still-dropping-maximum_2.json.check.mbtiles",
"strategies": "[{\"dropped_as_needed\":219,\"tile_size_desired\":74734},{\"dropped_as_needed\":207,\"tile_size_desired\":44415},{\"dropped_as_needed\":181,\"tile_size_desired\":35130}]",
"strategies": "[{\"dropped_as_needed\":220,\"tile_size_desired\":75535},{\"dropped_as_needed\":207,\"tile_size_desired\":44899},{\"dropped_as_needed\":182,\"tile_size_desired\":35505}]",
"tippecanoe_decisions": "{\"basezoom\":0,\"droprate\":2.5,\"retain_points_multiplier\":1}",
"type": "overlay",
"version": "2"
@@ -22,29 +22,27 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Populated place", "NAME": "Chicago", "DIFFASCII": 0, "NAMEASCII": "Chicago", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United States", "SOV_A3": "USA", "ADM0NAME": "United States of America", "ADM0_A3": "USA", "ADM1NAME": "Illinois", "ISO_A2": "US", "LATITUDE": 41.829991, "LONGITUDE": -87.750055, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 8990000, "POP_MIN": 2841952, "POP_OTHER": 3635101, "RANK_MAX": 13, "RANK_MIN": 12, "GEONAMEID": 4887398, "MEGANAME": "Chicago", "LS_NAME": "Chicago", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 3747798, "MAX_POP20": 5069998, "MAX_POP50": 8416660, "MAX_POP300": 8416660, "MAX_POP310": 8450289, "MAX_NATSCA": 300, "MIN_AREAKM": 1345, "MAX_AREAKM": 4804, "MIN_AREAMI": 519, "MAX_AREAMI": 1855, "MIN_PERKM": 471, "MAX_PERKM": 2946, "MIN_PERMI": 293, "MAX_PERMI": 1830, "MIN_BBXMIN": -88.408333, "MAX_BBXMIN": -88.03629, "MIN_BBXMAX": -87.528138, "MAX_BBXMAX": -87.125, "MIN_BBYMIN": 41.391667, "MAX_BBYMIN": 41.458333, "MIN_BBYMAX": 42.000972, "MAX_BBYMAX": 42.491667, "MEAN_BBXC": -87.85874, "MEAN_BBYC": 41.832719, "COMPARE": 0, "GN_ASCII": "Chicago", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 2841952, "ELEVATION": 179, "GTOPO30": 181, "TIMEZONE": "America/Chicago", "GEONAMESNO": "GeoNames match with ascii name + lat + long whole numbers.", "UN_FID": 531, "UN_ADM0": "United States of America", "UN_LAT": 41.82, "UN_LONG": -87.64, "POP1950": 4999, "POP1955": 5565, "POP1960": 6183, "POP1965": 6639, "POP1970": 7106, "POP1975": 7160, "POP1980": 7216, "POP1985": 7285, "POP1990": 7374, "POP1995": 7839, "POP2000": 8333, "POP2005": 8820, "POP2010": 8990, "POP2015": 9211, "POP2020": 9516, "POP2025": 9756, "POP2050": 9932 }, "geometry": { "type": "Point", "coordinates": [ -87.714844, 41.836828 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Havana", "NAMEALT": "La Habana", "DIFFASCII": 0, "NAMEASCII": "Havana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Cuba", "SOV_A3": "CUB", "ADM0NAME": "Cuba", "ADM0_A3": "CUB", "ADM1NAME": "Ciudad de la Habana", "ISO_A2": "CU", "LATITUDE": 23.131959, "LONGITUDE": -82.364182, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2174000, "POP_MIN": 1990917, "POP_OTHER": 1930305, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3553478, "MEGANAME": "La Habana", "LS_NAME": "Havana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1990917, "MAX_POP20": 2051170, "MAX_POP50": 2051170, "MAX_POP300": 2051170, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 323, "MAX_AREAKM": 362, "MIN_AREAMI": 125, "MAX_AREAMI": 140, "MIN_PERKM": 240, "MAX_PERKM": 286, "MIN_PERMI": 149, "MAX_PERMI": 177, "MIN_BBXMIN": -82.533333, "MAX_BBXMIN": -82.533333, "MIN_BBXMAX": -82.208333, "MAX_BBXMAX": -82.208333, "MIN_BBYMIN": 22.916667, "MAX_BBYMIN": 22.975161, "MIN_BBYMAX": 23.183333, "MAX_BBYMAX": 23.183333, "MEAN_BBXC": -82.354344, "MEAN_BBYC": 23.076845, "COMPARE": 0, "GN_ASCII": "Havana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 2163824, "ELEVATION": 0, "GTOPO30": 5, "TIMEZONE": "America/Havana", "GEONAMESNO": "GeoNames match general.", "UN_FID": 172, "UN_ADM0": "Cuba", "UN_LAT": 23.04, "UN_LONG": -82.41, "POP1950": 1116, "POP1955": 1289, "POP1960": 1436, "POP1965": 1598, "POP1970": 1779, "POP1975": 1848, "POP1980": 1913, "POP1985": 2005, "POP1990": 2108, "POP1995": 2183, "POP2000": 2187, "POP2005": 2189, "POP2010": 2174, "POP2015": 2159, "POP2020": 2151, "POP2025": 2150, "POP2050": 2150, "CITYALT": "Havana" }, "geometry": { "type": "Point", "coordinates": [ -82.353516, 23.160563 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Nassau", "DIFFASCII": 0, "NAMEASCII": "Nassau", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Bahamas, The", "SOV_A3": "BHS", "ADM0NAME": "The Bahamas", "ADM0_A3": "BHS", "ISO_A2": "BS", "LATITUDE": 25.08339, "LONGITUDE": -77.350044, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 227940, "POP_MIN": 160966, "POP_OTHER": 0, "RANK_MAX": 10, "RANK_MIN": 9, "GEONAMEID": 3571824, "LS_NAME": "Nassau", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 160966, "MAX_POP20": 160966, "MAX_POP50": 160966, "MAX_POP300": 160966, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 84, "MAX_AREAKM": 84, "MIN_AREAMI": 32, "MAX_AREAMI": 32, "MIN_PERKM": 66, "MAX_PERKM": 66, "MIN_PERMI": 41, "MAX_PERMI": 41, "MIN_BBXMIN": -77.4, "MAX_BBXMIN": -77.4, "MIN_BBXMAX": -77.258333, "MAX_BBXMAX": -77.258333, "MIN_BBYMIN": 25, "MAX_BBYMIN": 25, "MIN_BBYMAX": 25.091667, "MAX_BBYMAX": 25.091667, "MEAN_BBXC": -77.335571, "MEAN_BBYC": 25.04483, "COMPARE": 0, "GN_ASCII": "Nassau", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 23, "GN_POP": 227940, "ELEVATION": 0, "GTOPO30": 3, "TIMEZONE": "America/Nassau", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.343750, 25.085599 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Paramaribo", "DIFFASCII": 0, "NAMEASCII": "Paramaribo", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Suriname", "SOV_A3": "SUR", "ADM0NAME": "Suriname", "ADM0_A3": "SUR", "ADM1NAME": "Paramaribo", "ISO_A2": "SR", "LATITUDE": 5.83503, "LONGITUDE": -55.167031, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 254169, "POP_MIN": 223757, "POP_OTHER": 248161, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 3383330, "LS_NAME": "Paramaribo", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 254169, "MAX_POP20": 254169, "MAX_POP50": 254169, "MAX_POP300": 254169, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 104, "MAX_AREAKM": 105, "MIN_AREAMI": 40, "MAX_AREAMI": 40, "MIN_PERKM": 83, "MAX_PERKM": 85, "MIN_PERMI": 51, "MAX_PERMI": 53, "MIN_BBXMIN": -55.283333, "MAX_BBXMIN": -55.283333, "MIN_BBXMAX": -55.107566, "MAX_BBXMAX": -55.1, "MIN_BBYMIN": 5.766667, "MAX_BBYMIN": 5.766667, "MIN_BBYMAX": 5.866667, "MAX_BBYMAX": 5.866667, "MEAN_BBXC": -55.188737, "MEAN_BBYC": 5.826428, "COMPARE": 0, "GN_ASCII": "Paramaribo", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 16, "GN_POP": 223757, "ELEVATION": 0, "GTOPO30": 3, "TIMEZONE": "America/Paramaribo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -55.195312, 5.878332 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Reykjavík", "DIFFASCII": 1, "NAMEASCII": "Reykjavik", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Iceland", "SOV_A3": "ISL", "ADM0NAME": "Iceland", "ADM0_A3": "ISL", "ADM1NAME": "Suðurnes", "ISO_A2": "IS", "LATITUDE": 64.150024, "LONGITUDE": -21.950014, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 166212, "POP_MIN": 113906, "POP_OTHER": 160116, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 3413829, "LS_NAME": "Reykjavik", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 166212, "MAX_POP20": 166212, "MAX_POP50": 166212, "MAX_POP300": 166212, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 75, "MAX_AREAKM": 75, "MIN_AREAMI": 29, "MAX_AREAMI": 29, "MIN_PERKM": 119, "MAX_PERKM": 119, "MIN_PERMI": 74, "MAX_PERMI": 74, "MIN_BBXMIN": -22.008333, "MAX_BBXMIN": -22.008333, "MIN_BBXMAX": -21.75, "MAX_BBXMAX": -21.75, "MIN_BBYMIN": 64.05, "MAX_BBYMIN": 64.05, "MIN_BBYMAX": 64.166667, "MAX_BBYMAX": 64.166667, "MEAN_BBXC": -21.8825, "MEAN_BBYC": 64.116125, "COMPARE": 0, "GN_ASCII": "Reykjavik", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 39, "GN_POP": 113906, "ELEVATION": 0, "GTOPO30": 16, "TIMEZONE": "Atlantic/Reykjavik", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -21.972656, 64.168107 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Dublin", "DIFFASCII": 0, "NAMEASCII": "Dublin", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Ireland", "SOV_A3": "IRL", "ADM0NAME": "Ireland", "ADM0_A3": "IRL", "ADM1NAME": "Dublin", "ISO_A2": "IE", "LATITUDE": 53.333061, "LONGITUDE": -6.248906, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1059000, "POP_MIN": 968976, "POP_OTHER": 22478, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 2964574, "MEGANAME": "Dublin", "LS_NAME": "Dublin2", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 968976, "MAX_POP20": 968976, "MAX_POP50": 968976, "MAX_POP300": 968976, "MAX_POP310": 968976, "MAX_NATSCA": 300, "MIN_AREAKM": 351, "MAX_AREAKM": 351, "MIN_AREAMI": 135, "MAX_AREAMI": 135, "MIN_PERKM": 250, "MAX_PERKM": 250, "MIN_PERMI": 155, "MAX_PERMI": 155, "MIN_BBXMIN": -6.533333, "MAX_BBXMIN": -6.533333, "MIN_BBXMAX": -6.041667, "MAX_BBXMAX": -6.041667, "MIN_BBYMIN": 53.175, "MAX_BBYMIN": 53.175, "MIN_BBYMAX": 53.433333, "MAX_BBYMAX": 53.433333, "MEAN_BBXC": -6.278983, "MEAN_BBYC": 53.329717, "COMPARE": 0, "GN_ASCII": "Dublin", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 1024027, "ELEVATION": 0, "GTOPO30": 9, "TIMEZONE": "Europe/Dublin", "GEONAMESNO": "GeoNames match general.", "UN_FID": 302, "UN_ADM0": "Ireland", "UN_LAT": 53.34, "UN_LONG": -6.25, "POP1950": 626, "POP1955": 647, "POP1960": 661, "POP1965": 723, "POP1970": 771, "POP1975": 833, "POP1980": 903, "POP1985": 920, "POP1990": 916, "POP1995": 946, "POP2000": 989, "POP2005": 1037, "POP2010": 1059, "POP2015": 1098, "POP2020": 1177, "POP2025": 1257, "POP2050": 1332 }, "geometry": { "type": "Point", "coordinates": [ -6.240234, 53.330873 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital alt", "NAME": "Bir Lehlou", "DIFFASCII": 0, "NAMEASCII": "Bir Lehlou", "ADM0CAP": 0, "CAPALT": 1, "CAPIN": "Claimed as inte", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Western Sahara", "SOV_A3": "SAH", "ADM0NAME": "Western Sahara", "ADM0_A3": "SAH", "ISO_A2": "EH", "LATITUDE": 26.119167, "LONGITUDE": -9.652522, "CHANGED": 4, "NAMEDIFF": 1, "DIFFNOTE": "Added place.", "POP_MAX": 500, "POP_MIN": 200, "POP_OTHER": 0, "RANK_MAX": 2, "RANK_MIN": 1, "GEONAMEID": -1, "LS_MATCH": 2, "CHECKME": 0, "MAX_POP10": 0, "MAX_POP20": 0, "MAX_POP50": 0, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 0, "MIN_AREAKM": 0, "MAX_AREAKM": 0, "MIN_AREAMI": 0, "MAX_AREAMI": 0, "MIN_PERKM": 0, "MAX_PERKM": 0, "MIN_PERMI": 0, "MAX_PERMI": 0, "MIN_BBXMIN": 0, "MAX_BBXMIN": 0, "MIN_BBXMAX": 0, "MAX_BBXMAX": 0, "MIN_BBYMIN": 0, "MAX_BBYMIN": 0, "MIN_BBYMAX": 0, "MAX_BBYMAX": 0, "MEAN_BBXC": 0, "MEAN_BBYC": 0, "COMPARE": 1, "ADMIN1_COD": 0, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 0, "GEONAMESNO": "No GeoNames match due to small population, not in GeoNames, or poor NEV placement.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -9.667969, 26.115986 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Praia", "DIFFASCII": 0, "NAMEASCII": "Praia", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Cape Verde", "SOV_A3": "CPV", "ADM0NAME": "Cape Verde", "ADM0_A3": "CPV", "ISO_A2": "CV", "LATITUDE": 14.916698, "LONGITUDE": -23.516689, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 113364, "POP_MIN": 88859, "POP_OTHER": 89205, "RANK_MAX": 9, "RANK_MIN": 8, "GEONAMEID": 3374333, "LS_NAME": "Praia", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 88859, "MAX_POP20": 88859, "MAX_POP50": 88859, "MAX_POP300": 88859, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 37, "MAX_AREAKM": 37, "MIN_AREAMI": 14, "MAX_AREAMI": 14, "MIN_PERKM": 40, "MAX_PERKM": 40, "MIN_PERMI": 25, "MAX_PERMI": 25, "MIN_BBXMIN": -23.541667, "MAX_BBXMIN": -23.541667, "MIN_BBXMAX": -23.483333, "MAX_BBXMAX": -23.483333, "MIN_BBYMIN": 14.9, "MAX_BBYMIN": 14.9, "MIN_BBYMAX": 14.983333, "MAX_BBYMAX": 14.983333, "MEAN_BBXC": -23.514907, "MEAN_BBYC": 14.938056, "COMPARE": 0, "GN_ASCII": "Praia", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 113364, "ELEVATION": 0, "GTOPO30": -9999, "TIMEZONE": "Atlantic/Cape_Verde", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -23.554688, 14.944785 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Quito", "DIFFASCII": 0, "NAMEASCII": "Quito", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Ecuador", "SOV_A3": "ECU", "ADM0NAME": "Ecuador", "ADM0_A3": "ECU", "ADM1NAME": "Pichincha", "ISO_A2": "EC", "LATITUDE": -0.214988, "LONGITUDE": -78.500051, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1701000, "POP_MIN": 1399814, "POP_OTHER": 1435528, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3652462, "MEGANAME": "Quito", "LS_NAME": "Quito", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1472051, "MAX_POP20": 1892286, "MAX_POP50": 1892286, "MAX_POP300": 1892286, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 334, "MAX_AREAKM": 496, "MIN_AREAMI": 129, "MAX_AREAMI": 191, "MIN_PERKM": 233, "MAX_PERKM": 359, "MIN_PERMI": 145, "MAX_PERMI": 223, "MIN_BBXMIN": -78.591667, "MAX_BBXMIN": -78.591667, "MIN_BBXMAX": -78.291667, "MAX_BBXMAX": -78.291667, "MIN_BBYMIN": -0.391667, "MAX_BBYMIN": -0.30257, "MIN_BBYMAX": 0.025, "MAX_BBYMAX": 0.025, "MEAN_BBXC": -78.460061, "MEAN_BBYC": -0.198438, "COMPARE": 0, "GN_ASCII": "Quito", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 18, "GN_POP": 1399814, "ELEVATION": 0, "GTOPO30": 2764, "TIMEZONE": "America/Guayaquil", "GEONAMESNO": "GeoNames match general.", "UN_FID": 178, "UN_ADM0": "Ecuador", "UN_LAT": -0.22, "UN_LONG": -78.52, "POP1950": 206, "POP1955": 257, "POP1960": 319, "POP1965": 399, "POP1970": 501, "POP1975": 628, "POP1980": 780, "POP1985": 936, "POP1990": 1088, "POP1995": 1217, "POP2000": 1357, "POP2005": 1593, "POP2010": 1701, "POP2015": 1846, "POP2020": 2035, "POP2025": 2189, "POP2050": 2316 }, "geometry": { "type": "Point", "coordinates": [ -78.486328, -0.175781 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Sao Paulo", "NAMEALT": "Sao Paulo|São Paulo", "DIFFASCII": 0, "NAMEASCII": "Sao Paulo", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Brazil", "SOV_A3": "BRA", "ADM0NAME": "Brazil", "ADM0_A3": "BRA", "ADM1NAME": "São Paulo", "ISO_A2": "BR", "LATITUDE": -23.55868, "LONGITUDE": -46.62502, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 18845000, "POP_MIN": 10021295, "POP_OTHER": 11522944, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 3448439, "MEGANAME": "São Paulo", "LS_NAME": "Sao Paolo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 12495084, "MAX_POP20": 17425624, "MAX_POP50": 18203351, "MAX_POP300": 18203351, "MAX_POP310": 18203351, "MAX_NATSCA": 300, "MIN_AREAKM": 1434, "MAX_AREAKM": 2667, "MIN_AREAMI": 554, "MAX_AREAMI": 1030, "MIN_PERKM": 532, "MAX_PERKM": 1086, "MIN_PERMI": 330, "MAX_PERMI": 675, "MIN_BBXMIN": -47.058333, "MAX_BBXMIN": -47.056372, "MIN_BBXMAX": -46.383333, "MAX_BBXMAX": -46.108333, "MIN_BBYMIN": -23.891667, "MAX_BBYMIN": -23.842331, "MIN_BBYMAX": -23.358333, "MAX_BBYMAX": -23.241667, "MEAN_BBXC": -46.651489, "MEAN_BBYC": -23.558961, "COMPARE": 0, "GN_ASCII": "Sao Paulo", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 27, "GN_POP": 10021295, "ELEVATION": 0, "GTOPO30": 631, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 491, "UN_ADM0": "Brazil", "UN_LAT": -23.58, "UN_LONG": -46.62, "POP1950": 2334, "POP1955": 3044, "POP1960": 3970, "POP1965": 5494, "POP1970": 7620, "POP1975": 9614, "POP1980": 12089, "POP1985": 13395, "POP1990": 14776, "POP1995": 15948, "POP2000": 17099, "POP2005": 18333, "POP2010": 18845, "POP2015": 19582, "POP2020": 20544, "POP2025": 21124, "POP2050": 21428, "CITYALT": "Sao Paulo" }, "geometry": { "type": "Point", "coordinates": [ -46.669922, -23.563987 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Montevideo", "DIFFASCII": 0, "NAMEASCII": "Montevideo", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Uruguay", "SOV_A3": "URY", "ADM0NAME": "Uruguay", "ADM0_A3": "URY", "ADM1NAME": "Montevideo", "ISO_A2": "UY", "LATITUDE": -34.858042, "LONGITUDE": -56.171052, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1513000, "POP_MIN": 5324, "POP_OTHER": 1276128, "RANK_MAX": 12, "RANK_MIN": 5, "GEONAMEID": 5038018, "MEGANAME": "Montevideo", "LS_NAME": "Montevideo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1381747, "MAX_POP20": 1381747, "MAX_POP50": 1381747, "MAX_POP300": 1381747, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 347, "MAX_AREAKM": 347, "MIN_AREAMI": 134, "MAX_AREAMI": 134, "MIN_PERKM": 266, "MAX_PERKM": 266, "MIN_PERMI": 165, "MAX_PERMI": 165, "MIN_BBXMIN": -56.291667, "MAX_BBXMIN": -56.291667, "MIN_BBXMAX": -55.8, "MAX_BBXMAX": -55.8, "MIN_BBYMIN": -34.933333, "MAX_BBYMIN": -34.933333, "MIN_BBYMAX": -34.65, "MAX_BBYMAX": -34.65, "MEAN_BBXC": -56.12273, "MEAN_BBYC": -34.828337, "COMPARE": 0, "GN_ASCII": "Montevideo", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 5324, "ELEVATION": 284, "GTOPO30": 305, "TIMEZONE": "America/Chicago", "GEONAMESNO": "GeoNames match general.", "UN_FID": 579, "UN_ADM0": "Uruguay", "UN_LAT": -34.92, "UN_LONG": -56.16, "POP1950": 1212, "POP1955": 1248, "POP1960": 1285, "POP1965": 1323, "POP1970": 1362, "POP1975": 1403, "POP1980": 1454, "POP1985": 1508, "POP1990": 1546, "POP1995": 1584, "POP2000": 1561, "POP2005": 1525, "POP2010": 1513, "POP2015": 1504, "POP2020": 1506, "POP2025": 1515, "POP2050": 1520 }, "geometry": { "type": "Point", "coordinates": [ -56.162109, -34.885931 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Populated place", "NAME": "Rio de Janeiro", "DIFFASCII": 0, "NAMEASCII": "Rio de Janeiro", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Brazil", "SOV_A3": "BRA", "ADM0NAME": "Brazil", "ADM0_A3": "BRA", "ADM1NAME": "Rio de Janeiro", "ISO_A2": "BR", "LATITUDE": -22.925023, "LONGITUDE": -43.225021, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 11748000, "POP_MIN": 2010175, "POP_OTHER": 1821489, "RANK_MAX": 14, "RANK_MIN": 12, "GEONAMEID": 3451190, "MEGANAME": "Rio de Janeiro", "LS_NAME": "Rio de Janeiro", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2010175, "MAX_POP20": 8118691, "MAX_POP50": 8889292, "MAX_POP300": 8889292, "MAX_POP310": 8889292, "MAX_NATSCA": 300, "MIN_AREAKM": 316, "MAX_AREAKM": 1472, "MIN_AREAMI": 122, "MAX_AREAMI": 568, "MIN_PERKM": 203, "MAX_PERKM": 691, "MIN_PERMI": 126, "MAX_PERMI": 429, "MIN_BBXMIN": -43.75, "MAX_BBXMIN": -43.499182, "MIN_BBXMAX": -43.158333, "MAX_BBXMAX": -43.15, "MIN_BBYMIN": -23.033333, "MAX_BBYMIN": -23.033333, "MIN_BBYMAX": -22.837896, "MAX_BBYMAX": -22.575, "MEAN_BBXC": -43.407551, "MEAN_BBYC": -22.856463, "COMPARE": 0, "GN_ASCII": "Rio de Janeiro", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 21, "GN_POP": 6023699, "ELEVATION": 0, "GTOPO30": 19, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "Geonames ascii name + lat.d + long.d matching.", "UN_FID": 489, "UN_ADM0": "Brazil", "UN_LAT": -22.72, "UN_LONG": -43.45, "POP1950": 2950, "POP1955": 3592, "POP1960": 4374, "POP1965": 5387, "POP1970": 6637, "POP1975": 7557, "POP1980": 8583, "POP1985": 9086, "POP1990": 9595, "POP1995": 10174, "POP2000": 10803, "POP2005": 11469, "POP2010": 11748, "POP2015": 12171, "POP2020": 12775, "POP2025": 13179, "POP2050": 13413 }, "geometry": { "type": "Point", "coordinates": [ -43.242188, -22.917923 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Oslo", "DIFFASCII": 0, "NAMEASCII": "Oslo", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Kingdom of Norway", "SOV_A3": "NOR", "ADM0NAME": "Norway", "ADM0_A3": "NOR", "ADM1NAME": "Oslo", "ISO_A2": "NO", "LATITUDE": 59.91669, "LONGITUDE": 10.749979, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 835000, "POP_MIN": 580000, "POP_OTHER": 701804, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 3143244, "MEGANAME": "Oslo", "LS_NAME": "Oslo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 731563, "MAX_POP20": 731563, "MAX_POP50": 762374, "MAX_POP300": 762374, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 329, "MAX_AREAKM": 362, "MIN_AREAMI": 127, "MAX_AREAMI": 140, "MIN_PERKM": 340, "MAX_PERKM": 390, "MIN_PERMI": 211, "MAX_PERMI": 243, "MIN_BBXMIN": 10.333333, "MAX_BBXMIN": 10.440355, "MIN_BBXMAX": 11.091667, "MAX_BBXMAX": 11.091667, "MIN_BBYMIN": 59.708333, "MAX_BBYMIN": 59.708333, "MIN_BBYMAX": 60.066667, "MAX_BBYMAX": 60.066667, "MEAN_BBXC": 10.756508, "MEAN_BBYC": 59.906118, "COMPARE": 0, "GN_ASCII": "Oslo", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 12, "GN_POP": 580000, "ELEVATION": 0, "GTOPO30": 11, "TIMEZONE": "Europe/Oslo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 397, "UN_ADM0": "Norway", "UN_LAT": 59.93, "UN_LONG": 10.71, "POP1950": 468, "POP1955": 533, "POP1960": 578, "POP1965": 610, "POP1970": 643, "POP1975": 644, "POP1980": 643, "POP1985": 662, "POP1990": 684, "POP1995": 729, "POP2000": 774, "POP2005": 816, "POP2010": 835, "POP2015": 858, "POP2020": 885, "POP2025": 909, "POP2050": 936 }, "geometry": { "type": "Point", "coordinates": [ 10.722656, 59.933000 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Moscow", "NAMEPAR": "Moskva", "DIFFASCII": 0, "NAMEASCII": "Moscow", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Russia", "SOV_A3": "RUS", "ADM0NAME": "Russia", "ADM0_A3": "RUS", "ADM1NAME": "Moskva", "ISO_A2": "RU", "LATITUDE": 55.752164, "LONGITUDE": 37.615523, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 10452000, "POP_MIN": 10452000, "POP_OTHER": 10585385, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 524901, "MEGANAME": "Moskva", "LS_NAME": "Moscow", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 11029015, "MAX_POP20": 11030955, "MAX_POP50": 11547877, "MAX_POP300": 11547877, "MAX_POP310": 11547877, "MAX_NATSCA": 300, "MIN_AREAKM": 1434, "MAX_AREAKM": 1639, "MIN_AREAMI": 554, "MAX_AREAMI": 633, "MIN_PERKM": 875, "MAX_PERKM": 1135, "MIN_PERMI": 544, "MAX_PERMI": 705, "MIN_BBXMIN": 37.233333, "MAX_BBXMIN": 37.233333, "MIN_BBXMAX": 38.075401, "MAX_BBXMAX": 38.3, "MIN_BBYMIN": 55.341667, "MAX_BBYMIN": 55.533007, "MIN_BBYMAX": 56.075, "MAX_BBYMAX": 56.075, "MEAN_BBXC": 37.643636, "MEAN_BBYC": 55.754996, "COMPARE": 0, "GN_ASCII": "Moscow", "ADMIN1_COD": 0, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 0, "GEONAMESNO": "GeoNames match general + researched.", "UN_FID": 426, "UN_ADM0": "Russian Federation", "UN_LAT": 55.74, "UN_LONG": 37.7, "POP1950": 5356, "POP1955": 5749, "POP1960": 6170, "POP1965": 6622, "POP1970": 7106, "POP1975": 7623, "POP1980": 8136, "POP1985": 8580, "POP1990": 8987, "POP1995": 9201, "POP2000": 10016, "POP2005": 10416, "POP2010": 10452, "POP2015": 10495, "POP2020": 10524, "POP2025": 10526, "POP2050": 10526, "CITYALT": "Moscow" }, "geometry": { "type": "Point", "coordinates": [ 37.617188, 55.776573 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Tbilisi", "NAMEALT": "T'Bilisi", "DIFFASCII": 0, "NAMEASCII": "Tbilisi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Georgia", "SOV_A3": "GEO", "ADM0NAME": "Georgia", "ADM0_A3": "GEO", "ADM1NAME": "Tbilisi", "ISO_A2": "GE", "LATITUDE": 41.72501, "LONGITUDE": 44.790795, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1100000, "POP_MIN": 1005257, "POP_OTHER": 977179, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 611717, "MEGANAME": "Tbilisi", "LS_NAME": "Tbilisi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1005257, "MAX_POP20": 1005257, "MAX_POP50": 1007529, "MAX_POP300": 1007529, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 131, "MAX_AREAKM": 135, "MIN_AREAMI": 51, "MAX_AREAMI": 52, "MIN_PERKM": 128, "MAX_PERKM": 133, "MIN_PERMI": 80, "MAX_PERMI": 83, "MIN_BBXMIN": 44.708333, "MAX_BBXMIN": 44.708333, "MIN_BBXMAX": 44.933333, "MAX_BBXMAX": 44.933333, "MIN_BBYMIN": 41.616667, "MAX_BBYMIN": 41.627355, "MIN_BBYMAX": 41.825, "MAX_BBYMAX": 41.825, "MEAN_BBXC": 44.822812, "MEAN_BBYC": 41.722167, "COMPARE": 0, "GN_ASCII": "Tbilisi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 1049498, "ELEVATION": 0, "GTOPO30": 420, "TIMEZONE": "Asia/Tbilisi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 191, "UN_ADM0": "Georgia", "UN_LAT": 41.72, "UN_LONG": 44.78, "POP1950": 612, "POP1955": 659, "POP1960": 718, "POP1965": 803, "POP1970": 897, "POP1975": 992, "POP1980": 1090, "POP1985": 1177, "POP1990": 1224, "POP1995": 1160, "POP2000": 1100, "POP2005": 1093, "POP2010": 1100, "POP2015": 1108, "POP2020": 1113, "POP2025": 1114, "POP2050": 1114, "CITYALT": "T'Bilisi" }, "geometry": { "type": "Point", "coordinates": [ 44.824219, 41.705729 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Yerevan", "DIFFASCII": 0, "NAMEASCII": "Yerevan", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Armenia", "SOV_A3": "ARM", "ADM0NAME": "Armenia", "ADM0_A3": "ARM", "ADM1NAME": "Erevan", "ISO_A2": "AM", "LATITUDE": 40.181151, "LONGITUDE": 44.513551, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1102000, "POP_MIN": 1093485, "POP_OTHER": 1154748, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 616052, "MEGANAME": "Yerevan", "LS_NAME": "Yerevan", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 1200842, "MAX_POP20": 1200842, "MAX_POP50": 1200842, "MAX_POP300": 1200842, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 191, "MAX_AREAKM": 191, "MIN_AREAMI": 74, "MAX_AREAMI": 74, "MIN_PERKM": 166, "MAX_PERKM": 166, "MIN_PERMI": 103, "MAX_PERMI": 103, "MIN_BBXMIN": 44.391667, "MAX_BBXMIN": 44.391667, "MIN_BBXMAX": 44.6, "MAX_BBXMAX": 44.6, "MIN_BBYMIN": 39.925, "MAX_BBYMIN": 39.925, "MIN_BBYMAX": 40.241667, "MAX_BBYMAX": 40.241667, "MEAN_BBXC": 44.506293, "MEAN_BBYC": 40.127356, "COMPARE": 0, "GN_ASCII": "Yerevan", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 11, "GN_POP": 1093485, "ELEVATION": 0, "GTOPO30": 1002, "TIMEZONE": "Asia/Yerevan", "GEONAMESNO": "GeoNames match general.", "UN_FID": 377, "UN_ADM0": "Armenia", "UN_LAT": 40.2, "UN_LONG": 44.53, "POP1950": 341, "POP1955": 431, "POP1960": 538, "POP1965": 648, "POP1970": 778, "POP1975": 911, "POP1980": 1042, "POP1985": 1123, "POP1990": 1175, "POP1995": 1142, "POP2000": 1111, "POP2005": 1103, "POP2010": 1102, "POP2015": 1102, "POP2020": 1102, "POP2025": 1102, "POP2050": 1102 }, "geometry": { "type": "Point", "coordinates": [ 44.472656, 40.178873 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Juba", "DIFFASCII": 0, "NAMEASCII": "Juba", "ADM0CAP": 0, "CAPALT": 1, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "South Sudan", "SOV_A3": "SSD", "ADM0NAME": "South Sudan", "ADM0_A3": "SSD", "ADM1NAME": "Central Equatoria", "ISO_A2": "SS", "LATITUDE": 4.829975, "LONGITUDE": 31.580026, "CHANGED": 20, "NAMEDIFF": 0, "DIFFNOTE": "Changed country.", "POP_MAX": 111975, "POP_MIN": 111975, "POP_OTHER": 111975, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 373303, "LS_NAME": "Juba", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 111975, "MAX_POP20": 111975, "MAX_POP50": 111975, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 50, "MIN_AREAKM": 21, "MAX_AREAKM": 21, "MIN_AREAMI": 8, "MAX_AREAMI": 8, "MIN_PERKM": 30, "MAX_PERKM": 30, "MIN_PERMI": 18, "MAX_PERMI": 18, "MIN_BBXMIN": 31.575, "MAX_BBXMIN": 31.575, "MIN_BBXMAX": 31.625, "MAX_BBXMAX": 31.625, "MIN_BBYMIN": 4.816667, "MAX_BBYMIN": 4.816667, "MIN_BBYMAX": 4.883333, "MAX_BBYMAX": 4.883333, "MEAN_BBXC": 31.6015, "MEAN_BBYC": 4.845167, "COMPARE": 0, "GN_ASCII": "Juba", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 44, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 551, "TIMEZONE": "Africa/Khartoum", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 31.552734, 4.828260 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Astana", "DIFFASCII": 0, "NAMEASCII": "Astana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Kazakhstan", "SOV_A3": "KAZ", "ADM0NAME": "Kazakhstan", "ADM0_A3": "KAZ", "ADM1NAME": "Aqmola", "ISO_A2": "KZ", "LATITUDE": 51.181125, "LONGITUDE": 71.427774, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 345604, "POP_MIN": 325021, "POP_OTHER": 317445, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 1526273, "LS_NAME": "Astana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 325021, "MAX_POP20": 325021, "MAX_POP50": 325021, "MAX_POP300": 325021, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 104, "MAX_AREAKM": 104, "MIN_AREAMI": 40, "MAX_AREAMI": 40, "MIN_PERKM": 101, "MAX_PERKM": 101, "MIN_PERMI": 63, "MAX_PERMI": 63, "MIN_BBXMIN": 71.325, "MAX_BBXMIN": 71.325, "MIN_BBXMAX": 71.533333, "MAX_BBXMAX": 71.533333, "MIN_BBYMIN": 51.1, "MAX_BBYMIN": 51.1, "MIN_BBYMAX": 51.225, "MAX_BBYMAX": 51.225, "MEAN_BBXC": 71.43275, "MEAN_BBYC": 51.164443, "COMPARE": 0, "GN_ASCII": "Astana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 5, "GN_POP": 345604, "ELEVATION": 0, "GTOPO30": 339, "TIMEZONE": "Asia/Qyzylorda", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 71.455078, 51.179343 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Islamabad", "DIFFASCII": 0, "NAMEASCII": "Islamabad", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Pakistan", "SOV_A3": "PAK", "ADM0NAME": "Pakistan", "ADM0_A3": "PAK", "ADM1NAME": "F.C.T.", "ISO_A2": "PK", "LATITUDE": 33.699996, "LONGITUDE": 73.166634, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 780000, "POP_MIN": 601600, "POP_OTHER": 893673, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 1176615, "MEGANAME": "Islamabad", "LS_NAME": "Islamabad", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 742356, "MAX_POP20": 742356, "MAX_POP50": 7482035, "MAX_POP300": 7482969, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 772, "MAX_AREAKM": 5463, "MIN_AREAMI": 298, "MAX_AREAMI": 2109, "MIN_PERKM": 545, "MAX_PERKM": 4154, "MIN_PERMI": 339, "MAX_PERMI": 2581, "MIN_BBXMIN": 72.286464, "MAX_BBXMIN": 73.033333, "MIN_BBXMAX": 73.516667, "MAX_BBXMAX": 73.816667, "MIN_BBYMIN": 32.7, "MAX_BBYMIN": 33.258333, "MIN_BBYMAX": 33.766667, "MAX_BBYMAX": 34.533333, "MEAN_BBXC": 73.182617, "MEAN_BBYC": 33.557939, "COMPARE": 0, "GN_ASCII": "Islamabad", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 8, "GN_POP": 601600, "ELEVATION": 0, "GTOPO30": 497, "TIMEZONE": "Asia/Karachi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 401, "UN_ADM0": "Pakistan", "UN_LAT": 33.71, "UN_LONG": 73.06, "POP1950": 36, "POP1955": 41, "POP1960": 45, "POP1965": 56, "POP1970": 70, "POP1975": 107, "POP1980": 189, "POP1985": 260, "POP1990": 343, "POP1995": 452, "POP2000": 594, "POP2005": 732, "POP2010": 780, "POP2015": 851, "POP2020": 988, "POP2025": 1148, "POP2050": 1320 }, "geometry": { "type": "Point", "coordinates": [ 73.125000, 33.724340 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-0 capital", "NAME": "New Delhi", "DIFFASCII": 0, "NAMEASCII": "New Delhi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 0, "SOV0NAME": "India", "SOV_A3": "IND", "ADM0NAME": "India", "ADM0_A3": "IND", "ADM1NAME": "Delhi", "ISO_A2": "IN", "LATITUDE": 28.600023, "LONGITUDE": 77.19998, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 317797, "POP_MIN": 317797, "POP_OTHER": 8060107, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 1261481, "LS_NAME": "New Delhi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 8761047, "MAX_POP20": 13414375, "MAX_POP50": 32426336, "MAX_POP300": 32424761, "MAX_POP310": 224908923, "MAX_NATSCA": 300, "MIN_AREAKM": 864, "MAX_AREAKM": 186559, "MIN_AREAMI": 334, "MAX_AREAMI": 72030, "MIN_PERKM": 244, "MAX_PERKM": 130296, "MIN_PERMI": 152, "MAX_PERMI": 80962, "MIN_BBXMIN": 71.033333, "MAX_BBXMIN": 76.943289, "MIN_BBXMAX": 77.43183, "MAX_BBXMAX": 82.566667, "MIN_BBYMIN": 24, "MAX_BBYMIN": 28.152007, "MIN_BBYMAX": 28.738629, "MAX_BBYMAX": 33.466667, "MEAN_BBXC": 77.27294500000001, "MEAN_BBYC": 28.382537, "COMPARE": 0, "GN_ASCII": "New Delhi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 317797, "ELEVATION": 0, "GTOPO30": 205, "TIMEZONE": "Asia/Kolkata", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 77.167969, 28.613459 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Ulaanbaatar", "DIFFASCII": 0, "NAMEASCII": "Ulaanbaatar", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Mongolia", "SOV_A3": "MNG", "ADM0NAME": "Mongolia", "ADM0_A3": "MNG", "ADM1NAME": "Ulaanbaatar", "ISO_A2": "MN", "LATITUDE": 47.916673, "LONGITUDE": 106.916616, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 885000, "POP_MIN": 769612, "POP_OTHER": 765359, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 2028462, "MEGANAME": "Ulaanbaatar", "LS_NAME": "Ulaanbaatar", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 769612, "MAX_POP20": 769612, "MAX_POP50": 769612, "MAX_POP300": 769612, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 143, "MAX_AREAKM": 143, "MIN_AREAMI": 55, "MAX_AREAMI": 55, "MIN_PERKM": 144, "MAX_PERKM": 144, "MIN_PERMI": 89, "MAX_PERMI": 89, "MIN_BBXMIN": 106.725, "MAX_BBXMIN": 106.725, "MIN_BBXMAX": 107.041667, "MAX_BBXMAX": 107.041667, "MIN_BBYMIN": 47.883333, "MAX_BBYMIN": 47.883333, "MIN_BBYMAX": 48.016667, "MAX_BBYMAX": 48.016667, "MEAN_BBXC": 106.883013, "MEAN_BBYC": 47.932237, "COMPARE": 0, "GN_ASCII": "Ulaanbaatar", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 20, "GN_POP": 844818, "ELEVATION": 0, "GTOPO30": 1299, "TIMEZONE": "Asia/Ulaanbaatar", "GEONAMESNO": "GeoNames match general.", "UN_FID": 367, "UN_ADM0": "Mongolia", "UN_LAT": 47.92, "UN_LONG": 106.91, "POP1950": 70, "POP1955": 112, "POP1960": 179, "POP1965": 248, "POP1970": 298, "POP1975": 356, "POP1980": 423, "POP1985": 492, "POP1990": 572, "POP1995": 661, "POP2000": 763, "POP2005": 856, "POP2010": 885, "POP2015": 919, "POP2020": 978, "POP2025": 1044, "POP2050": 1112 }, "geometry": { "type": "Point", "coordinates": [ 106.875000, 47.931066 ] } }
,
@@ -52,9 +50,9 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 2, "FEATURECLA": "Admin-1 region capital", "NAME": "Osaka", "NAMEALT": "Osaka-Kobe", "DIFFASCII": 0, "NAMEASCII": "Osaka", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Japan", "SOV_A3": "JPN", "ADM0NAME": "Japan", "ADM0_A3": "JPN", "ADM1NAME": "Osaka", "ISO_A2": "JP", "LATITUDE": 34.750035, "LONGITUDE": 135.460145, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed feature to Admin-0 region capital.", "POP_MAX": 11294000, "POP_MIN": 2592413, "POP_OTHER": 9630783, "RANK_MAX": 14, "RANK_MIN": 12, "GEONAMEID": 1853909, "MEGANAME": "Osaka-Kobe", "LS_NAME": "Osaka", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 10169723, "MAX_POP20": 10259448, "MAX_POP50": 13292739, "MAX_POP300": 15645640, "MAX_POP310": 15645640, "MAX_NATSCA": 300, "MIN_AREAKM": 1561, "MAX_AREAKM": 2861, "MIN_AREAMI": 603, "MAX_AREAMI": 1105, "MIN_PERKM": 546, "MAX_PERKM": 1202, "MIN_PERMI": 339, "MAX_PERMI": 747, "MIN_BBXMIN": 134.508333, "MAX_BBXMIN": 135.304598, "MIN_BBXMAX": 135.883333, "MAX_BBXMAX": 135.883333, "MIN_BBYMIN": 34.325, "MAX_BBYMIN": 34.408333, "MIN_BBYMAX": 34.916667, "MAX_BBYMAX": 35.1, "MEAN_BBXC": 135.475415, "MEAN_BBYC": 34.676719, "COMPARE": 0, "GN_ASCII": "Osaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 32, "GN_POP": 2592413, "ELEVATION": 0, "GTOPO30": 4, "TIMEZONE": "Asia/Tokyo", "GEONAMESNO": "GeoNames rough area, rough name.", "UN_FID": 315, "UN_ADM0": "Japan", "UN_LAT": 34.63, "UN_LONG": 135.51, "POP1950": 4147, "POP1955": 5120, "POP1960": 6227, "POP1965": 7654, "POP1970": 9408, "POP1975": 9844, "POP1980": 9990, "POP1985": 10350, "POP1990": 11035, "POP1995": 11052, "POP2000": 11165, "POP2005": 11258, "POP2010": 11294, "POP2015": 11337, "POP2020": 11365, "POP2025": 11368, "POP2050": 11368, "CITYALT": "Osaka" }, "geometry": { "type": "Point", "coordinates": [ 135.439453, 34.741612 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Palikir", "DIFFASCII": 0, "NAMEASCII": "Palikir", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Federated States of Micronesia", "SOV_A3": "FSM", "ADM0NAME": "Federated States of Micronesia", "ADM0_A3": "FSM", "ISO_A2": "FM", "LATITUDE": 6.916644, "LONGITUDE": 158.149974, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 4645, "POP_MIN": 4645, "POP_OTHER": 0, "RANK_MAX": 4, "RANK_MIN": 4, "GEONAMEID": 2081986, "LS_NAME": "Palikir", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 412, "MAX_POP20": 412, "MAX_POP50": 412, "MAX_POP300": 412, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 1, "MAX_AREAKM": 1, "MIN_AREAMI": 0, "MAX_AREAMI": 0, "MIN_PERKM": 4, "MAX_PERKM": 4, "MIN_PERMI": 2, "MAX_PERMI": 2, "MIN_BBXMIN": 158.158333, "MAX_BBXMIN": 158.158333, "MIN_BBXMAX": 158.166667, "MAX_BBXMAX": 158.166667, "MIN_BBYMIN": 6.908333, "MAX_BBYMIN": 6.908333, "MIN_BBYMAX": 6.916667, "MAX_BBYMAX": 6.916667, "MEAN_BBXC": 158.1625, "MEAN_BBYC": 6.9125, "COMPARE": 0, "GN_ASCII": "Palikir", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 4645, "ELEVATION": 0, "GTOPO30": 159, "TIMEZONE": "Pacific/Ponape", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 158.115234, 6.926427 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Majuro", "DIFFASCII": 0, "NAMEASCII": "Majuro", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Marshall Islands", "SOV_A3": "MHL", "ADM0NAME": "Marshall Islands", "ADM0_A3": "MHL", "ISO_A2": "MH", "LATITUDE": 7.103004, "LONGITUDE": 171.38, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 25400, "POP_MIN": 20500, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2113779, "LS_NAME": "Majuro", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2084, "MAX_POP20": 2084, "MAX_POP50": 2084, "MAX_POP300": 2084, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 171.366667, "MAX_BBXMIN": 171.366667, "MIN_BBXMAX": 171.375, "MAX_BBXMAX": 171.375, "MIN_BBYMIN": 7.091667, "MAX_BBYMIN": 7.091667, "MIN_BBYMAX": 7.116667, "MAX_BBYMAX": 7.116667, "MEAN_BBXC": 171.370833, "MEAN_BBYC": 7.104167, "COMPARE": 0, "GN_ASCII": "Majuro", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 20500, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Majuro", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.386719, 7.100893 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Lusaka", "DIFFASCII": 0, "NAMEASCII": "Lusaka", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Zambia", "SOV_A3": "ZMB", "ADM0NAME": "Zambia", "ADM0_A3": "ZMB", "ADM1NAME": "Lusaka", "ISO_A2": "ZM", "LATITUDE": -15.416644, "LONGITUDE": 28.283328, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1328000, "POP_MIN": 1267440, "POP_OTHER": 1240558, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 909137, "MEGANAME": "Lusaka", "LS_NAME": "Lusaka", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1289566, "MAX_POP20": 1289566, "MAX_POP50": 1289566, "MAX_POP300": 1289566, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 183, "MAX_AREAKM": 183, "MIN_AREAMI": 71, "MAX_AREAMI": 71, "MIN_PERKM": 122, "MAX_PERKM": 122, "MIN_PERMI": 76, "MAX_PERMI": 76, "MIN_BBXMIN": 28.225, "MAX_BBXMIN": 28.225, "MIN_BBXMAX": 28.416667, "MAX_BBXMAX": 28.416667, "MIN_BBYMIN": -15.483333, "MAX_BBYMIN": -15.483333, "MIN_BBYMAX": -15.333333, "MAX_BBYMAX": -15.333333, "MEAN_BBXC": 28.308596, "MEAN_BBYC": -15.403941, "COMPARE": 0, "GN_ASCII": "Lusaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 1267440, "ELEVATION": 0, "GTOPO30": 1277, "TIMEZONE": "Africa/Lusaka", "GEONAMESNO": "GeoNames match general.", "UN_FID": 589, "UN_ADM0": "Zambia", "UN_LAT": -15.42, "UN_LONG": 28.17, "POP1950": 31, "POP1955": 53, "POP1960": 91, "POP1965": 160, "POP1970": 278, "POP1975": 385, "POP1980": 533, "POP1985": 636, "POP1990": 757, "POP1995": 902, "POP2000": 1073, "POP2005": 1261, "POP2010": 1328, "POP2015": 1421, "POP2020": 1587, "POP2025": 1797, "POP2050": 2047 }, "geometry": { "type": "Point", "coordinates": [ 28.300781, -15.453680 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Gaborone", "DIFFASCII": 0, "NAMEASCII": "Gaborone", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Botswana", "SOV_A3": "BWA", "ADM0NAME": "Botswana", "ADM0_A3": "BWA", "ADM1NAME": "South-East", "ISO_A2": "BW", "LATITUDE": -24.646313, "LONGITUDE": 25.911948, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 208411, "POP_MIN": 159243, "POP_OTHER": 158896, "RANK_MAX": 10, "RANK_MIN": 9, "GEONAMEID": 933773, "LS_NAME": "Gaborone", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 159243, "MAX_POP20": 159243, "MAX_POP50": 159243, "MAX_POP300": 159243, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 72, "MAX_AREAKM": 72, "MIN_AREAMI": 28, "MAX_AREAMI": 28, "MIN_PERKM": 59, "MAX_PERKM": 59, "MIN_PERMI": 37, "MAX_PERMI": 37, "MIN_BBXMIN": 25.858333, "MAX_BBXMIN": 25.858333, "MIN_BBXMAX": 25.991667, "MAX_BBXMAX": 25.991667, "MIN_BBYMIN": -24.7, "MAX_BBYMIN": -24.7, "MIN_BBYMAX": -24.6, "MAX_BBYMAX": -24.6, "MEAN_BBXC": 25.925091, "MEAN_BBYC": -24.656793, "COMPARE": 0, "GN_ASCII": "Gaborone", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 208411, "ELEVATION": 0, "GTOPO30": 1006, "TIMEZONE": "Africa/Gaborone", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.927734, -24.607069 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Victoria", "DIFFASCII": 0, "NAMEASCII": "Victoria", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Seychelles", "SOV_A3": "SYC", "ADM0NAME": "Seychelles", "ADM0_A3": "SYC", "ISO_A2": "SC", "LATITUDE": -4.616632, "LONGITUDE": 55.44999, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 33576, "POP_MIN": 22881, "POP_OTHER": 33737, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 241131, "LS_NAME": "Victoria4", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 33576, "MAX_POP20": 33576, "MAX_POP50": 33576, "MAX_POP300": 33576, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 15, "MAX_AREAKM": 15, "MIN_AREAMI": 6, "MAX_AREAMI": 6, "MIN_PERKM": 26, "MAX_PERKM": 26, "MIN_PERMI": 16, "MAX_PERMI": 16, "MIN_BBXMIN": 55.416667, "MAX_BBXMIN": 55.416667, "MIN_BBXMAX": 55.475, "MAX_BBXMAX": 55.475, "MIN_BBYMIN": -4.65, "MAX_BBYMIN": -4.65, "MIN_BBYMAX": -4.6, "MAX_BBYMAX": -4.6, "MEAN_BBXC": 55.45, "MEAN_BBYC": -4.626389, "COMPARE": 0, "GN_ASCII": "Victoria", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 22881, "ELEVATION": 0, "GTOPO30": -9999, "TIMEZONE": "Indian/Mahe", "GEONAMESNO": "GeoNames match general + researched.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 55.458984, -4.653080 ] } }
,
@@ -236,7 +234,7 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 1, "FEATURECLA": "Admin-0 capital", "NAME": "Brasilia", "NAMEALT": "Brasília", "DIFFASCII": 0, "NAMEASCII": "Brasilia", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Brazil", "SOV_A3": "BRA", "ADM0NAME": "Brazil", "ADM0_A3": "BRA", "ADM1NAME": "Distrito Federal", "ISO_A2": "BR", "LATITUDE": -15.78334, "LONGITUDE": -47.916052, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3716996, "POP_MIN": 2562963, "POP_OTHER": 1772679, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3469058, "MEGANAME": "Brasília", "LS_NAME": "Brasilia", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1838722, "MAX_POP20": 1836390, "MAX_POP50": 1838722, "MAX_POP300": 1838722, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 436, "MAX_AREAKM": 439, "MIN_AREAMI": 168, "MAX_AREAMI": 169, "MIN_PERKM": 311, "MAX_PERKM": 318, "MIN_PERMI": 193, "MAX_PERMI": 197, "MIN_BBXMIN": -48.158333, "MAX_BBXMIN": -48.158333, "MIN_BBXMAX": -47.783333, "MAX_BBXMAX": -47.783333, "MIN_BBYMIN": -15.941667, "MAX_BBYMIN": -15.941667, "MIN_BBYMAX": -15.7, "MAX_BBYMAX": -15.7, "MEAN_BBXC": -47.9714, "MEAN_BBYC": -15.824583, "COMPARE": 0, "GN_ASCII": "Brasilia", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 2207718, "ELEVATION": 0, "GTOPO30": 1092, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 472, "UN_ADM0": "Brazil", "UN_LAT": -15.79, "UN_LONG": -47.89, "POP1950": 36, "POP1955": 70, "POP1960": 137, "POP1965": 268, "POP1970": 525, "POP1975": 827, "POP1980": 1293, "POP1985": 1559, "POP1990": 1863, "POP1995": 2257, "POP2000": 2746, "POP2005": 3341, "POP2010": 3599, "POP2015": 3938, "POP2020": 4284, "POP2025": 4463, "POP2050": 4578, "CITYALT": "Brasilia" }, "geometry": { "type": "Point", "coordinates": [ -47.922363, -15.771109 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 3, "FEATURECLA": "Admin-0 capital", "NAME": "Buenos Aires", "DIFFASCII": 0, "NAMEASCII": "Buenos Aires", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Argentina", "SOV_A3": "ARG", "ADM0NAME": "Argentina", "ADM0_A3": "ARG", "ADM1NAME": "Ciudad de Buenos Aires", "ISO_A2": "AR", "LATITUDE": -34.602502, "LONGITUDE": -58.397531, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 12795000, "POP_MIN": 10929146, "POP_OTHER": 10271457, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 3435910, "MEGANAME": "Buenos Aires", "LS_NAME": "Buenos Aires", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 10929146, "MAX_POP20": 10991915, "MAX_POP50": 12611862, "MAX_POP300": 12611862, "MAX_POP310": 12611862, "MAX_NATSCA": 300, "MIN_AREAKM": 1675, "MAX_AREAKM": 2447, "MIN_AREAMI": 647, "MAX_AREAMI": 945, "MIN_PERKM": 570, "MAX_PERKM": 1064, "MIN_PERMI": 354, "MAX_PERMI": 661, "MIN_BBXMIN": -59.016667, "MAX_BBXMIN": -58.757731, "MIN_BBXMAX": -58.175, "MAX_BBXMAX": -57.816667, "MIN_BBYMIN": -35.008333, "MAX_BBYMIN": -35.008333, "MIN_BBYMAX": -34.375, "MAX_BBYMAX": -34.366667, "MEAN_BBXC": -58.50845, "MEAN_BBYC": -34.681331, "COMPARE": 0, "GN_ASCII": "Buenos Aires", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 13076300, "ELEVATION": 0, "GTOPO30": 13, "TIMEZONE": "America/Argentina/Buenos_Aires", "GEONAMESNO": "GeoNames match general.", "UN_FID": 201, "UN_ADM0": "Argentina", "UN_LAT": -34.62, "UN_LONG": -58.44, "POP1950": 5098, "POP1955": 5799, "POP1960": 6598, "POP1965": 7317, "POP1970": 8105, "POP1975": 8745, "POP1980": 9422, "POP1985": 9959, "POP1990": 10513, "POP1995": 11154, "POP2000": 11847, "POP2005": 12553, "POP2010": 12795, "POP2015": 13089, "POP2020": 13432, "POP2025": 13653, "POP2050": 13768 }, "geometry": { "type": "Point", "coordinates": [ -58.403320, -34.597042 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Sao Paulo", "NAMEALT": "Sao Paulo|São Paulo", "DIFFASCII": 0, "NAMEASCII": "Sao Paulo", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Brazil", "SOV_A3": "BRA", "ADM0NAME": "Brazil", "ADM0_A3": "BRA", "ADM1NAME": "São Paulo", "ISO_A2": "BR", "LATITUDE": -23.55868, "LONGITUDE": -46.62502, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 18845000, "POP_MIN": 10021295, "POP_OTHER": 11522944, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 3448439, "MEGANAME": "São Paulo", "LS_NAME": "Sao Paolo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 12495084, "MAX_POP20": 17425624, "MAX_POP50": 18203351, "MAX_POP300": 18203351, "MAX_POP310": 18203351, "MAX_NATSCA": 300, "MIN_AREAKM": 1434, "MAX_AREAKM": 2667, "MIN_AREAMI": 554, "MAX_AREAMI": 1030, "MIN_PERKM": 532, "MAX_PERKM": 1086, "MIN_PERMI": 330, "MAX_PERMI": 675, "MIN_BBXMIN": -47.058333, "MAX_BBXMIN": -47.056372, "MIN_BBXMAX": -46.383333, "MAX_BBXMAX": -46.108333, "MIN_BBYMIN": -23.891667, "MAX_BBYMIN": -23.842331, "MIN_BBYMAX": -23.358333, "MAX_BBYMAX": -23.241667, "MEAN_BBXC": -46.651489, "MEAN_BBYC": -23.558961, "COMPARE": 0, "GN_ASCII": "Sao Paulo", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 27, "GN_POP": 10021295, "ELEVATION": 0, "GTOPO30": 631, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 491, "UN_ADM0": "Brazil", "UN_LAT": -23.58, "UN_LONG": -46.62, "POP1950": 2334, "POP1955": 3044, "POP1960": 3970, "POP1965": 5494, "POP1970": 7620, "POP1975": 9614, "POP1980": 12089, "POP1985": 13395, "POP1990": 14776, "POP1995": 15948, "POP2000": 17099, "POP2005": 18333, "POP2010": 18845, "POP2015": 19582, "POP2020": 20544, "POP2025": 21124, "POP2050": 21428, "CITYALT": "Sao Paulo" }, "geometry": { "type": "Point", "coordinates": [ -46.625977, -23.563987 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Populated place", "NAME": "Rio de Janeiro", "DIFFASCII": 0, "NAMEASCII": "Rio de Janeiro", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Brazil", "SOV_A3": "BRA", "ADM0NAME": "Brazil", "ADM0_A3": "BRA", "ADM1NAME": "Rio de Janeiro", "ISO_A2": "BR", "LATITUDE": -22.925023, "LONGITUDE": -43.225021, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 11748000, "POP_MIN": 2010175, "POP_OTHER": 1821489, "RANK_MAX": 14, "RANK_MIN": 12, "GEONAMEID": 3451190, "MEGANAME": "Rio de Janeiro", "LS_NAME": "Rio de Janeiro", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2010175, "MAX_POP20": 8118691, "MAX_POP50": 8889292, "MAX_POP300": 8889292, "MAX_POP310": 8889292, "MAX_NATSCA": 300, "MIN_AREAKM": 316, "MAX_AREAKM": 1472, "MIN_AREAMI": 122, "MAX_AREAMI": 568, "MIN_PERKM": 203, "MAX_PERKM": 691, "MIN_PERMI": 126, "MAX_PERMI": 429, "MIN_BBXMIN": -43.75, "MAX_BBXMIN": -43.499182, "MIN_BBXMAX": -43.158333, "MAX_BBXMAX": -43.15, "MIN_BBYMIN": -23.033333, "MAX_BBYMIN": -23.033333, "MIN_BBYMAX": -22.837896, "MAX_BBYMAX": -22.575, "MEAN_BBXC": -43.407551, "MEAN_BBYC": -22.856463, "COMPARE": 0, "GN_ASCII": "Rio de Janeiro", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 21, "GN_POP": 6023699, "ELEVATION": 0, "GTOPO30": 19, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "Geonames ascii name + lat.d + long.d matching.", "UN_FID": 489, "UN_ADM0": "Brazil", "UN_LAT": -22.72, "UN_LONG": -43.45, "POP1950": 2950, "POP1955": 3592, "POP1960": 4374, "POP1965": 5387, "POP1970": 6637, "POP1975": 7557, "POP1980": 8583, "POP1985": 9086, "POP1990": 9595, "POP1995": 10174, "POP2000": 10803, "POP2005": 11469, "POP2010": 11748, "POP2015": 12171, "POP2020": 12775, "POP2025": 13179, "POP2050": 13413 }, "geometry": { "type": "Point", "coordinates": [ -43.220215, -22.917923 ] } }
] }
@@ -268,7 +266,7 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Dakar", "DIFFASCII": 0, "NAMEASCII": "Dakar", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Senegal", "SOV_A3": "SEN", "ADM0NAME": "Senegal", "ADM0_A3": "SEN", "ADM1NAME": "Dakar", "ISO_A2": "SM", "LATITUDE": 14.715832, "LONGITUDE": -17.47313, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2604000, "POP_MIN": 2476400, "POP_OTHER": 2470140, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2253354, "MEGANAME": "Dakar", "LS_NAME": "Dakar", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2635239, "MAX_POP20": 2634882, "MAX_POP50": 2660614, "MAX_POP300": 2660614, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 257, "MAX_AREAKM": 302, "MIN_AREAMI": 99, "MAX_AREAMI": 117, "MIN_PERKM": 222, "MAX_PERKM": 288, "MIN_PERMI": 138, "MAX_PERMI": 179, "MIN_BBXMIN": -17.533333, "MAX_BBXMIN": -17.533333, "MIN_BBXMAX": -17.2, "MAX_BBXMAX": -17.125, "MIN_BBYMIN": 14.65, "MAX_BBYMIN": 14.65, "MIN_BBYMAX": 14.825, "MAX_BBYMAX": 14.825, "MEAN_BBXC": -17.343779, "MEAN_BBYC": 14.742828, "COMPARE": 0, "GN_ASCII": "Dakar", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 2476400, "ELEVATION": 0, "GTOPO30": 14, "TIMEZONE": "Africa/Dakar", "GEONAMESNO": "GeoNames match general.", "UN_FID": 447, "UN_ADM0": "Senegal", "UN_LAT": 14.68, "UN_LONG": -17.45, "POP1950": 211, "POP1955": 235, "POP1960": 359, "POP1965": 473, "POP1970": 610, "POP1975": 782, "POP1980": 957, "POP1985": 1162, "POP1990": 1405, "POP1995": 1688, "POP2000": 2029, "POP2005": 2434, "POP2010": 2604, "POP2015": 2856, "POP2020": 3275, "POP2025": 3726, "POP2050": 4225 }, "geometry": { "type": "Point", "coordinates": [ -17.468262, 14.711135 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Bamako", "DIFFASCII": 0, "NAMEASCII": "Bamako", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Mali", "SOV_A3": "MLI", "ADM0NAME": "Mali", "ADM0_A3": "MLI", "ADM1NAME": "Bamako", "ISO_A2": "ML", "LATITUDE": 12.650015, "LONGITUDE": -8.000039, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1494000, "POP_MIN": 1297281, "POP_OTHER": 1301407, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2460596, "MEGANAME": "Bamako", "LS_NAME": "Bamako", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1316564, "MAX_POP20": 1316564, "MAX_POP50": 1316564, "MAX_POP300": 1316564, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 172, "MAX_AREAKM": 172, "MIN_AREAMI": 66, "MAX_AREAMI": 66, "MIN_PERKM": 106, "MAX_PERKM": 106, "MIN_PERMI": 66, "MAX_PERMI": 66, "MIN_BBXMIN": -8.058333, "MAX_BBXMIN": -8.058333, "MIN_BBXMAX": -7.908333, "MAX_BBXMAX": -7.908333, "MIN_BBYMIN": 12.541667, "MAX_BBYMIN": 12.541667, "MIN_BBYMAX": 12.716667, "MAX_BBYMAX": 12.716667, "MEAN_BBXC": -7.987419, "MEAN_BBYC": 12.626173, "COMPARE": 0, "GN_ASCII": "Bamako", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 1297281, "ELEVATION": 0, "GTOPO30": 350, "TIMEZONE": "Africa/Bamako", "GEONAMESNO": "GeoNames match general.", "UN_FID": 349, "UN_ADM0": "Mali", "UN_LAT": 12.65, "UN_LONG": -7.98, "POP1950": 89, "POP1955": 111, "POP1960": 130, "POP1965": 158, "POP1970": 222, "POP1975": 363, "POP1980": 489, "POP1985": 608, "POP1990": 746, "POP1995": 910, "POP2000": 1110, "POP2005": 1368, "POP2010": 1494, "POP2015": 1708, "POP2020": 2130, "POP2025": 2633, "POP2050": 3214 }, "geometry": { "type": "Point", "coordinates": [ -7.998047, 12.661778 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Ouagadougou", "DIFFASCII": 0, "NAMEASCII": "Ouagadougou", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Burkina Faso", "SOV_A3": "BFA", "ADM0NAME": "Burkina Faso", "ADM0_A3": "BFA", "ADM1NAME": "Kadiogo", "ISO_A2": "BF", "LATITUDE": 12.370316, "LONGITUDE": -1.524724, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1149000, "POP_MIN": 835457, "POP_OTHER": 713874, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 2357048, "MEGANAME": "Ouagadougou", "LS_NAME": "Ouagadougou", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 835457, "MAX_POP20": 835457, "MAX_POP50": 835457, "MAX_POP300": 835457, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 236, "MAX_AREAKM": 236, "MIN_AREAMI": 91, "MAX_AREAMI": 91, "MIN_PERKM": 133, "MAX_PERKM": 133, "MIN_PERMI": 83, "MAX_PERMI": 83, "MIN_BBXMIN": -1.616667, "MAX_BBXMIN": -1.616667, "MIN_BBXMAX": -1.433333, "MAX_BBXMAX": -1.433333, "MIN_BBYMIN": 12.275, "MAX_BBYMIN": 12.275, "MIN_BBYMAX": 12.483333, "MAX_BBYMAX": 12.483333, "MEAN_BBXC": -1.521746, "MEAN_BBYC": 12.365975, "COMPARE": 0, "GN_ASCII": "Ouagadougou", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 53, "GN_POP": 1086505, "ELEVATION": 0, "GTOPO30": 307, "TIMEZONE": "Africa/Ouagadougou", "GEONAMESNO": "GeoNames match general.", "UN_FID": 578, "UN_ADM0": "Burkina Faso", "UN_LAT": 12.48, "UN_LONG": -1.67, "POP1950": 33, "POP1955": 46, "POP1960": 59, "POP1965": 82, "POP1970": 111, "POP1975": 149, "POP1980": 257, "POP1985": 424, "POP1990": 537, "POP1995": 667, "POP2000": 828, "POP2005": 1044, "POP2010": 1149, "POP2015": 1324, "POP2020": 1676, "POP2025": 2111, "POP2050": 2632 }, "geometry": { "type": "Point", "coordinates": [ -1.516113, 12.382928 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Quito", "DIFFASCII": 0, "NAMEASCII": "Quito", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Ecuador", "SOV_A3": "ECU", "ADM0NAME": "Ecuador", "ADM0_A3": "ECU", "ADM1NAME": "Pichincha", "ISO_A2": "EC", "LATITUDE": -0.214988, "LONGITUDE": -78.500051, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1701000, "POP_MIN": 1399814, "POP_OTHER": 1435528, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3652462, "MEGANAME": "Quito", "LS_NAME": "Quito", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1472051, "MAX_POP20": 1892286, "MAX_POP50": 1892286, "MAX_POP300": 1892286, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 334, "MAX_AREAKM": 496, "MIN_AREAMI": 129, "MAX_AREAMI": 191, "MIN_PERKM": 233, "MAX_PERKM": 359, "MIN_PERMI": 145, "MAX_PERMI": 223, "MIN_BBXMIN": -78.591667, "MAX_BBXMIN": -78.591667, "MIN_BBXMAX": -78.291667, "MAX_BBXMAX": -78.291667, "MIN_BBYMIN": -0.391667, "MAX_BBYMIN": -0.30257, "MIN_BBYMAX": 0.025, "MAX_BBYMAX": 0.025, "MEAN_BBXC": -78.460061, "MEAN_BBYC": -0.198438, "COMPARE": 0, "GN_ASCII": "Quito", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 18, "GN_POP": 1399814, "ELEVATION": 0, "GTOPO30": 2764, "TIMEZONE": "America/Guayaquil", "GEONAMESNO": "GeoNames match general.", "UN_FID": 178, "UN_ADM0": "Ecuador", "UN_LAT": -0.22, "UN_LONG": -78.52, "POP1950": 206, "POP1955": 257, "POP1960": 319, "POP1965": 399, "POP1970": 501, "POP1975": 628, "POP1980": 780, "POP1985": 936, "POP1990": 1088, "POP1995": 1217, "POP2000": 1357, "POP2005": 1593, "POP2010": 1701, "POP2015": 1846, "POP2020": 2035, "POP2025": 2189, "POP2050": 2316 }, "geometry": { "type": "Point", "coordinates": [ -78.508301, -0.219726 ] } }
,
@@ -288,9 +286,9 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Windhoek", "DIFFASCII": 0, "NAMEASCII": "Windhoek", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Namibia", "SOV_A3": "NAM", "ADM0NAME": "Namibia", "ADM0_A3": "NAM", "ADM1NAME": "Khomas", "ISO_A2": "NA", "LATITUDE": -22.570006, "LONGITUDE": 17.083546, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 268132, "POP_MIN": 262796, "POP_OTHER": 262796, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 3352136, "LS_NAME": "Windhoek", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 262796, "MAX_POP20": 262796, "MAX_POP50": 262796, "MAX_POP300": 262796, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 89, "MAX_AREAKM": 89, "MIN_AREAMI": 35, "MAX_AREAMI": 35, "MIN_PERKM": 60, "MAX_PERKM": 60, "MIN_PERMI": 37, "MAX_PERMI": 37, "MIN_BBXMIN": 17.008333, "MAX_BBXMIN": 17.008333, "MIN_BBXMAX": 17.116667, "MAX_BBXMAX": 17.116667, "MIN_BBYMIN": -22.625, "MAX_BBYMIN": -22.625, "MIN_BBYMAX": -22.491667, "MAX_BBYMAX": -22.491667, "MEAN_BBXC": 17.064196, "MEAN_BBYC": -22.551143, "COMPARE": 0, "GN_ASCII": "Windhoek", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 21, "GN_POP": 268132, "ELEVATION": 0, "GTOPO30": 1722, "TIMEZONE": "Africa/Windhoek", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 17.072754, -22.573438 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Kigali", "DIFFASCII": 0, "NAMEASCII": "Kigali", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Rwanda", "SOV_A3": "RWA", "ADM0NAME": "Rwanda", "ADM0_A3": "RWA", "ADM1NAME": "Kigali City", "ISO_A2": "RW", "LATITUDE": -1.95359, "LONGITUDE": 30.060532, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 860000, "POP_MIN": 745261, "POP_OTHER": 1152904, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 202061, "MEGANAME": "Kigali", "LS_NAME": "Kigali", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1046787, "MAX_POP20": 2263899, "MAX_POP50": 5065653, "MAX_POP300": 7102391, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 601, "MAX_AREAKM": 8753, "MIN_AREAMI": 232, "MAX_AREAMI": 3380, "MIN_PERKM": 735, "MAX_PERKM": 9184, "MIN_PERMI": 457, "MAX_PERMI": 5707, "MIN_BBXMIN": 29.166667, "MAX_BBXMIN": 29.833333, "MIN_BBXMAX": 30.233333, "MAX_BBXMAX": 30.475, "MIN_BBYMIN": -2.991667, "MAX_BBYMIN": -2.075, "MIN_BBYMAX": -1.76663, "MAX_BBYMAX": -1.075, "MEAN_BBXC": 29.913775, "MEAN_BBYC": -2.034427, "COMPARE": 0, "GN_ASCII": "Kigali", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 745261, "ELEVATION": 0, "GTOPO30": 1568, "TIMEZONE": "Africa/Kigali", "GEONAMESNO": "GeoNames match general.", "UN_FID": 439, "UN_ADM0": "Rwanda", "UN_LAT": -1.95, "UN_LONG": 30.05, "POP1950": 18, "POP1955": 25, "POP1960": 34, "POP1965": 45, "POP1970": 59, "POP1975": 90, "POP1980": 128, "POP1985": 168, "POP1990": 219, "POP1995": 289, "POP2000": 497, "POP2005": 775, "POP2010": 860, "POP2015": 947, "POP2020": 1152, "POP2025": 1413, "POP2050": 1715 }, "geometry": { "type": "Point", "coordinates": [ 30.058594, -1.955187 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Lusaka", "DIFFASCII": 0, "NAMEASCII": "Lusaka", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Zambia", "SOV_A3": "ZMB", "ADM0NAME": "Zambia", "ADM0_A3": "ZMB", "ADM1NAME": "Lusaka", "ISO_A2": "ZM", "LATITUDE": -15.416644, "LONGITUDE": 28.283328, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1328000, "POP_MIN": 1267440, "POP_OTHER": 1240558, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 909137, "MEGANAME": "Lusaka", "LS_NAME": "Lusaka", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1289566, "MAX_POP20": 1289566, "MAX_POP50": 1289566, "MAX_POP300": 1289566, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 183, "MAX_AREAKM": 183, "MIN_AREAMI": 71, "MAX_AREAMI": 71, "MIN_PERKM": 122, "MAX_PERKM": 122, "MIN_PERMI": 76, "MAX_PERMI": 76, "MIN_BBXMIN": 28.225, "MAX_BBXMIN": 28.225, "MIN_BBXMAX": 28.416667, "MAX_BBXMAX": 28.416667, "MIN_BBYMIN": -15.483333, "MAX_BBYMIN": -15.483333, "MIN_BBYMAX": -15.333333, "MAX_BBYMAX": -15.333333, "MEAN_BBXC": 28.308596, "MEAN_BBYC": -15.403941, "COMPARE": 0, "GN_ASCII": "Lusaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 1267440, "ELEVATION": 0, "GTOPO30": 1277, "TIMEZONE": "Africa/Lusaka", "GEONAMESNO": "GeoNames match general.", "UN_FID": 589, "UN_ADM0": "Zambia", "UN_LAT": -15.42, "UN_LONG": 28.17, "POP1950": 31, "POP1955": 53, "POP1960": 91, "POP1965": 160, "POP1970": 278, "POP1975": 385, "POP1980": 533, "POP1985": 636, "POP1990": 757, "POP1995": 902, "POP2000": 1073, "POP2005": 1261, "POP2010": 1328, "POP2015": 1421, "POP2020": 1587, "POP2025": 1797, "POP2050": 2047 }, "geometry": { "type": "Point", "coordinates": [ 28.278809, -15.411319 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Lilongwe", "DIFFASCII": 0, "NAMEASCII": "Lilongwe", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Malawi", "SOV_A3": "MWI", "ADM0NAME": "Malawi", "ADM0_A3": "MWI", "ADM1NAME": "Lilongwe", "ISO_A2": "MW", "LATITUDE": -13.983295, "LONGITUDE": 33.783302, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 646750, "POP_MIN": 646750, "POP_OTHER": 1061388, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 927967, "LS_NAME": "Lilongwe", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 965164, "MAX_POP20": 912521, "MAX_POP50": 989470, "MAX_POP300": 989470, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 1100, "MAX_AREAKM": 1373, "MIN_AREAMI": 425, "MAX_AREAMI": 530, "MIN_PERKM": 1360, "MAX_PERKM": 1658, "MIN_PERMI": 845, "MAX_PERMI": 1030, "MIN_BBXMIN": 33.508333, "MAX_BBXMIN": 33.508333, "MIN_BBXMAX": 34.187755, "MAX_BBXMAX": 34.608333, "MIN_BBYMIN": -14.433333, "MAX_BBYMIN": -14.408333, "MIN_BBYMAX": -13.691667, "MAX_BBYMAX": -13.641667, "MEAN_BBXC": 33.888699, "MEAN_BBYC": -14.028166, "COMPARE": 0, "GN_ASCII": "Lilongwe", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 11, "GN_POP": 646750, "ELEVATION": 0, "GTOPO30": 1025, "TIMEZONE": "Africa/Blantyre", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 33.793945, -13.987376 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Gaborone", "DIFFASCII": 0, "NAMEASCII": "Gaborone", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Botswana", "SOV_A3": "BWA", "ADM0NAME": "Botswana", "ADM0_A3": "BWA", "ADM1NAME": "South-East", "ISO_A2": "BW", "LATITUDE": -24.646313, "LONGITUDE": 25.911948, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 208411, "POP_MIN": 159243, "POP_OTHER": 158896, "RANK_MAX": 10, "RANK_MIN": 9, "GEONAMEID": 933773, "LS_NAME": "Gaborone", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 159243, "MAX_POP20": 159243, "MAX_POP50": 159243, "MAX_POP300": 159243, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 72, "MAX_AREAKM": 72, "MIN_AREAMI": 28, "MAX_AREAMI": 28, "MIN_PERKM": 59, "MAX_PERKM": 59, "MIN_PERMI": 37, "MAX_PERMI": 37, "MIN_BBXMIN": 25.858333, "MAX_BBXMIN": 25.858333, "MIN_BBXMAX": 25.991667, "MAX_BBXMAX": 25.991667, "MIN_BBYMIN": -24.7, "MAX_BBYMIN": -24.7, "MIN_BBYMAX": -24.6, "MAX_BBYMAX": -24.6, "MEAN_BBXC": 25.925091, "MEAN_BBYC": -24.656793, "COMPARE": 0, "GN_ASCII": "Gaborone", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 208411, "ELEVATION": 0, "GTOPO30": 1006, "TIMEZONE": "Africa/Gaborone", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.905762, -24.647017 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Victoria", "DIFFASCII": 0, "NAMEASCII": "Victoria", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Seychelles", "SOV_A3": "SYC", "ADM0NAME": "Seychelles", "ADM0_A3": "SYC", "ISO_A2": "SC", "LATITUDE": -4.616632, "LONGITUDE": 55.44999, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 33576, "POP_MIN": 22881, "POP_OTHER": 33737, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 241131, "LS_NAME": "Victoria4", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 33576, "MAX_POP20": 33576, "MAX_POP50": 33576, "MAX_POP300": 33576, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 15, "MAX_AREAKM": 15, "MIN_AREAMI": 6, "MAX_AREAMI": 6, "MIN_PERKM": 26, "MAX_PERKM": 26, "MIN_PERMI": 16, "MAX_PERMI": 16, "MIN_BBXMIN": 55.416667, "MAX_BBXMIN": 55.416667, "MIN_BBXMAX": 55.475, "MAX_BBXMAX": 55.475, "MIN_BBYMIN": -4.65, "MAX_BBYMIN": -4.65, "MIN_BBYMAX": -4.6, "MAX_BBYMAX": -4.6, "MEAN_BBXC": 55.45, "MEAN_BBYC": -4.626389, "COMPARE": 0, "GN_ASCII": "Victoria", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 22881, "ELEVATION": 0, "GTOPO30": -9999, "TIMEZONE": "Indian/Mahe", "GEONAMESNO": "GeoNames match general + researched.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 55.458984, -4.609278 ] } }
,
@@ -308,33 +306,31 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital alt", "NAME": "The Hague", "DIFFASCII": 0, "NAMEASCII": "The Hague", "ADM0CAP": 0, "CAPALT": 1, "CAPIN": "Official, legis", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Kingdom of the Netherlands", "SOV_A3": "NLD", "ADM0NAME": "Netherlands", "ADM0_A3": "NLD", "ADM1NAME": "Zuid-Holland", "ISO_A2": "NL", "LATITUDE": 52.080037, "LONGITUDE": 4.269961, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1406000, "POP_MIN": 501725, "POP_OTHER": 688599, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 2747373, "LS_NAME": "The Hague", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 708489, "MAX_POP20": 708489, "MAX_POP50": 2312867, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 50, "MIN_AREAKM": 195, "MAX_AREAKM": 710, "MIN_AREAMI": 75, "MAX_AREAMI": 274, "MIN_PERKM": 217, "MAX_PERKM": 764, "MIN_PERMI": 135, "MAX_PERMI": 475, "MIN_BBXMIN": 4.15, "MAX_BBXMIN": 4.15, "MIN_BBXMAX": 4.45, "MAX_BBXMAX": 4.749141, "MIN_BBYMIN": 51.766667, "MAX_BBYMIN": 51.958333, "MIN_BBYMAX": 52.158333, "MAX_BBYMAX": 52.158333, "MEAN_BBXC": 4.355912, "MEAN_BBYC": 52.021475, "COMPARE": 0, "GN_ASCII": "Den Haag", "FEATURE_CL": "P", "FEATURE_CO": "PPLG", "ADMIN1_COD": 11, "GN_POP": 474292, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Europe/Amsterdam", "GEONAMESNO": "GeoNames rough area, rough name.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 4.262695, 52.079506 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Prague", "NAMEPAR": "Praha", "DIFFASCII": 0, "NAMEASCII": "Prague", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Czech Republic", "SOV_A3": "CZE", "ADM0NAME": "Czech Republic", "ADM0_A3": "CZE", "ADM1NAME": "Prague", "ISO_A2": "CZ", "LATITUDE": 50.083337, "LONGITUDE": 14.46598, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 1162000, "POP_MIN": 2087, "POP_OTHER": 1088042, "RANK_MAX": 12, "RANK_MIN": 4, "GEONAMEID": 4548393, "MEGANAME": "Praha", "LS_NAME": "Prague", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1115771, "MAX_POP20": 1115771, "MAX_POP50": 1115771, "MAX_POP300": 1115771, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 317, "MAX_AREAKM": 317, "MIN_AREAMI": 122, "MAX_AREAMI": 122, "MIN_PERKM": 249, "MAX_PERKM": 249, "MIN_PERMI": 155, "MAX_PERMI": 155, "MIN_BBXMIN": 14.266667, "MAX_BBXMIN": 14.266667, "MIN_BBXMAX": 14.616667, "MAX_BBXMAX": 14.616667, "MIN_BBYMIN": 49.95, "MAX_BBYMIN": 49.95, "MIN_BBYMAX": 50.183333, "MAX_BBYMAX": 50.183333, "MEAN_BBXC": 14.445557, "MEAN_BBYC": 50.073451, "COMPARE": 0, "GN_ASCII": "Prague", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 2087, "ELEVATION": 308, "GTOPO30": 306, "TIMEZONE": "America/Chicago", "GEONAMESNO": "GeoNames match general.", "UN_FID": 173, "UN_ADM0": "Czech Republic", "UN_LAT": 50.1, "UN_LONG": 14.45, "POP1950": 935, "POP1955": 967, "POP1960": 1001, "POP1965": 1038, "POP1970": 1076, "POP1975": 1126, "POP1980": 1179, "POP1985": 1197, "POP1990": 1212, "POP1995": 1194, "POP2000": 1172, "POP2005": 1164, "POP2010": 1162, "POP2015": 1160, "POP2020": 1159, "POP2025": 1159, "POP2050": 1159, "CITYALT": "Prague" }, "geometry": { "type": "Point", "coordinates": [ 14.458008, 50.078295 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Warsaw", "NAMEPAR": "Warszawa", "DIFFASCII": 0, "NAMEASCII": "Warsaw", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Poland", "SOV_A3": "POL", "ADM0NAME": "Poland", "ADM0_A3": "POL", "ADM1NAME": "Masovian", "ISO_A2": "PL", "LATITUDE": 52.250001, "LONGITUDE": 21, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 1707000, "POP_MIN": 1702139, "POP_OTHER": 2012431, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 756135, "MEGANAME": "Warszawa", "LS_NAME": "Warsaw", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2129163, "MAX_POP20": 2129163, "MAX_POP50": 2129163, "MAX_POP300": 2129163, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 802, "MAX_AREAKM": 802, "MIN_AREAMI": 310, "MAX_AREAMI": 310, "MIN_PERKM": 759, "MAX_PERKM": 759, "MIN_PERMI": 471, "MAX_PERMI": 471, "MIN_BBXMIN": 20.666667, "MAX_BBXMIN": 20.666667, "MIN_BBXMAX": 21.358333, "MAX_BBXMAX": 21.358333, "MIN_BBYMIN": 52.033333, "MAX_BBYMIN": 52.033333, "MIN_BBYMAX": 52.433333, "MAX_BBYMAX": 52.433333, "MEAN_BBXC": 21.031458, "MEAN_BBYC": 52.230916, "COMPARE": 0, "GN_ASCII": "Warsaw", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 78, "GN_POP": 1702139, "ELEVATION": 0, "GTOPO30": 94, "TIMEZONE": "Europe/Warsaw", "GEONAMESNO": "GeoNames match general.", "UN_FID": 418, "UN_ADM0": "Poland", "UN_LAT": 52.24, "UN_LONG": 21.01, "POP1950": 768, "POP1955": 942, "POP1960": 1119, "POP1965": 1212, "POP1970": 1300, "POP1975": 1444, "POP1980": 1565, "POP1985": 1596, "POP1990": 1628, "POP1995": 1652, "POP2000": 1666, "POP2005": 1693, "POP2010": 1707, "POP2015": 1724, "POP2020": 1735, "POP2025": 1736, "POP2050": 1736, "CITYALT": "Warsaw" }, "geometry": { "type": "Point", "coordinates": [ 21.005859, 52.254709 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Helsinki", "DIFFASCII": 0, "NAMEASCII": "Helsinki", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Finland", "SOV_A3": "FIN", "ADM0NAME": "Finland", "ADM0_A3": "FIN", "ADM1NAME": "Southern Finland", "ISO_A2": "FI", "LATITUDE": 60.175563, "LONGITUDE": 24.934126, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 1115000, "POP_MIN": 558457, "POP_OTHER": 762958, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 658225, "MEGANAME": "Helsinki", "LS_NAME": "Helsinki", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 852233, "MAX_POP20": 852233, "MAX_POP50": 852233, "MAX_POP300": 852233, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 513, "MAX_AREAKM": 513, "MIN_AREAMI": 198, "MAX_AREAMI": 198, "MIN_PERKM": 550, "MAX_PERKM": 550, "MIN_PERMI": 342, "MAX_PERMI": 342, "MIN_BBXMIN": 24.558333, "MAX_BBXMIN": 24.558333, "MIN_BBXMAX": 25.191667, "MAX_BBXMAX": 25.191667, "MIN_BBYMIN": 60.116667, "MAX_BBYMIN": 60.116667, "MIN_BBYMAX": 60.433333, "MAX_BBYMAX": 60.433333, "MEAN_BBXC": 24.910042, "MEAN_BBYC": 60.254779, "COMPARE": 0, "GN_ASCII": "Helsinki", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 13, "GN_POP": 558457, "ELEVATION": 0, "GTOPO30": 23, "TIMEZONE": "Europe/Helsinki", "GEONAMESNO": "GeoNames match general.", "UN_FID": 183, "UN_ADM0": "Finland", "UN_LAT": 60.19, "UN_LONG": 24.97, "POP1950": 366, "POP1955": 405, "POP1960": 448, "POP1965": 478, "POP1970": 507, "POP1975": 582, "POP1980": 674, "POP1985": 724, "POP1990": 872, "POP1995": 943, "POP2000": 1019, "POP2005": 1094, "POP2010": 1115, "POP2015": 1139, "POP2020": 1169, "POP2025": 1195, "POP2050": 1220 }, "geometry": { "type": "Point", "coordinates": [ 24.938965, 60.174306 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Vilnius", "DIFFASCII": 0, "NAMEASCII": "Vilnius", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Lithuania", "SOV_A3": "LTU", "ADM0NAME": "Lithuania", "ADM0_A3": "LTU", "ADM1NAME": "Vilniaus", "ISO_A2": "LT", "LATITUDE": 54.683366, "LONGITUDE": 25.316635, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 542366, "POP_MIN": 507029, "POP_OTHER": 494356, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 593116, "LS_NAME": "Vilnius", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 507029, "MAX_POP20": 507029, "MAX_POP50": 507029, "MAX_POP300": 507029, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 126, "MAX_AREAKM": 126, "MIN_AREAMI": 49, "MAX_AREAMI": 49, "MIN_PERKM": 162, "MAX_PERKM": 162, "MIN_PERMI": 101, "MAX_PERMI": 101, "MIN_BBXMIN": 25.166667, "MAX_BBXMIN": 25.166667, "MIN_BBXMAX": 25.391667, "MAX_BBXMAX": 25.391667, "MIN_BBYMIN": 54.575, "MAX_BBYMIN": 54.575, "MIN_BBYMAX": 54.775, "MAX_BBYMAX": 54.775, "MEAN_BBXC": 25.259623, "MEAN_BBYC": 54.692063, "COMPARE": 0, "GN_ASCII": "Vilnius", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 65, "GN_POP": 542366, "ELEVATION": 0, "GTOPO30": 125, "TIMEZONE": "Europe/Vilnius", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.312500, 54.686534 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Moscow", "NAMEPAR": "Moskva", "DIFFASCII": 0, "NAMEASCII": "Moscow", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Russia", "SOV_A3": "RUS", "ADM0NAME": "Russia", "ADM0_A3": "RUS", "ADM1NAME": "Moskva", "ISO_A2": "RU", "LATITUDE": 55.752164, "LONGITUDE": 37.615523, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 10452000, "POP_MIN": 10452000, "POP_OTHER": 10585385, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 524901, "MEGANAME": "Moskva", "LS_NAME": "Moscow", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 11029015, "MAX_POP20": 11030955, "MAX_POP50": 11547877, "MAX_POP300": 11547877, "MAX_POP310": 11547877, "MAX_NATSCA": 300, "MIN_AREAKM": 1434, "MAX_AREAKM": 1639, "MIN_AREAMI": 554, "MAX_AREAMI": 633, "MIN_PERKM": 875, "MAX_PERKM": 1135, "MIN_PERMI": 544, "MAX_PERMI": 705, "MIN_BBXMIN": 37.233333, "MAX_BBXMIN": 37.233333, "MIN_BBXMAX": 38.075401, "MAX_BBXMAX": 38.3, "MIN_BBYMIN": 55.341667, "MAX_BBYMIN": 55.533007, "MIN_BBYMAX": 56.075, "MAX_BBYMAX": 56.075, "MEAN_BBXC": 37.643636, "MEAN_BBYC": 55.754996, "COMPARE": 0, "GN_ASCII": "Moscow", "ADMIN1_COD": 0, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 0, "GEONAMESNO": "GeoNames match general + researched.", "UN_FID": 426, "UN_ADM0": "Russian Federation", "UN_LAT": 55.74, "UN_LONG": 37.7, "POP1950": 5356, "POP1955": 5749, "POP1960": 6170, "POP1965": 6622, "POP1970": 7106, "POP1975": 7623, "POP1980": 8136, "POP1985": 8580, "POP1990": 8987, "POP1995": 9201, "POP2000": 10016, "POP2005": 10416, "POP2010": 10452, "POP2015": 10495, "POP2020": 10524, "POP2025": 10526, "POP2050": 10526, "CITYALT": "Moscow" }, "geometry": { "type": "Point", "coordinates": [ 37.617188, 55.751849 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Algiers", "NAMEALT": "El Djazaïr", "DIFFASCII": 0, "NAMEASCII": "Algiers", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Algeria", "SOV_A3": "DZA", "ADM0NAME": "Algeria", "ADM0_A3": "DZA", "ADM1NAME": "Alger", "ISO_A2": "DZ", "LATITUDE": 36.763065, "LONGITUDE": 3.050553, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3354000, "POP_MIN": 1977663, "POP_OTHER": 3332619, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2507480, "MEGANAME": "El Djazaïr", "LS_NAME": "Algiers", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 3368320, "MAX_POP20": 3698473, "MAX_POP50": 4203253, "MAX_POP300": 4203253, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 886, "MAX_AREAKM": 1275, "MIN_AREAMI": 342, "MAX_AREAMI": 492, "MIN_PERKM": 798, "MAX_PERKM": 1192, "MIN_PERMI": 496, "MAX_PERMI": 741, "MIN_BBXMIN": 2.641667, "MAX_BBXMIN": 2.808333, "MIN_BBXMAX": 3.548211, "MAX_BBXMAX": 3.741667, "MIN_BBYMIN": 36.45, "MAX_BBYMIN": 36.508333, "MIN_BBYMAX": 36.816667, "MAX_BBYMAX": 36.816667, "MEAN_BBXC": 3.101671, "MEAN_BBYC": 36.673641, "COMPARE": 0, "GN_ASCII": "Algiers", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 1977663, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Africa/Algiers", "GEONAMESNO": "GeoNames match general.", "UN_FID": 6, "UN_ADM0": "Algeria", "UN_LAT": 36.78, "UN_LONG": 3.05, "POP1950": 516, "POP1955": 623, "POP1960": 872, "POP1965": 1049, "POP1970": 1254, "POP1975": 1499, "POP1980": 1621, "POP1985": 1672, "POP1990": 1908, "POP1995": 2295, "POP2000": 2754, "POP2005": 3199, "POP2010": 3354, "POP2015": 3574, "POP2020": 3922, "POP2025": 4235, "POP2050": 4499, "CITYALT": "Algiers" }, "geometry": { "type": "Point", "coordinates": [ 3.054199, 36.756490 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Tbilisi", "NAMEALT": "T'Bilisi", "DIFFASCII": 0, "NAMEASCII": "Tbilisi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Georgia", "SOV_A3": "GEO", "ADM0NAME": "Georgia", "ADM0_A3": "GEO", "ADM1NAME": "Tbilisi", "ISO_A2": "GE", "LATITUDE": 41.72501, "LONGITUDE": 44.790795, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1100000, "POP_MIN": 1005257, "POP_OTHER": 977179, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 611717, "MEGANAME": "Tbilisi", "LS_NAME": "Tbilisi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1005257, "MAX_POP20": 1005257, "MAX_POP50": 1007529, "MAX_POP300": 1007529, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 131, "MAX_AREAKM": 135, "MIN_AREAMI": 51, "MAX_AREAMI": 52, "MIN_PERKM": 128, "MAX_PERKM": 133, "MIN_PERMI": 80, "MAX_PERMI": 83, "MIN_BBXMIN": 44.708333, "MAX_BBXMIN": 44.708333, "MIN_BBXMAX": 44.933333, "MAX_BBXMAX": 44.933333, "MIN_BBYMIN": 41.616667, "MAX_BBYMIN": 41.627355, "MIN_BBYMAX": 41.825, "MAX_BBYMAX": 41.825, "MEAN_BBXC": 44.822812, "MEAN_BBYC": 41.722167, "COMPARE": 0, "GN_ASCII": "Tbilisi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 1049498, "ELEVATION": 0, "GTOPO30": 420, "TIMEZONE": "Asia/Tbilisi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 191, "UN_ADM0": "Georgia", "UN_LAT": 41.72, "UN_LONG": 44.78, "POP1950": 612, "POP1955": 659, "POP1960": 718, "POP1965": 803, "POP1970": 897, "POP1975": 992, "POP1980": 1090, "POP1985": 1177, "POP1990": 1224, "POP1995": 1160, "POP2000": 1100, "POP2005": 1093, "POP2010": 1100, "POP2015": 1108, "POP2020": 1113, "POP2025": 1114, "POP2050": 1114, "CITYALT": "T'Bilisi" }, "geometry": { "type": "Point", "coordinates": [ 44.780273, 41.722131 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Tripoli", "DIFFASCII": 0, "NAMEASCII": "Tripoli", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Libya", "SOV_A3": "LBY", "ADM0NAME": "Libya", "ADM0_A3": "LBY", "ADM1NAME": "Tajura' wa an Nawahi al Arba", "ISO_A2": "LY", "LATITUDE": 32.8925, "LONGITUDE": 13.180012, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2189000, "POP_MIN": 229398, "POP_OTHER": 1149981, "RANK_MAX": 12, "RANK_MIN": 10, "GEONAMEID": -1, "MEGANAME": "Tarabulus", "LS_NAME": "Tripoli1", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1173386, "MAX_POP20": 1173386, "MAX_POP50": 1173386, "MAX_POP300": 1173386, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 195, "MAX_AREAKM": 195, "MIN_AREAMI": 75, "MAX_AREAMI": 75, "MIN_PERKM": 142, "MAX_PERKM": 142, "MIN_PERMI": 88, "MAX_PERMI": 88, "MIN_BBXMIN": 12.983333, "MAX_BBXMIN": 12.983333, "MIN_BBXMAX": 13.408333, "MAX_BBXMAX": 13.408333, "MIN_BBYMIN": 32.808333, "MAX_BBYMIN": 32.808333, "MIN_BBYMAX": 32.908333, "MAX_BBYMAX": 32.908333, "MEAN_BBXC": 13.19322, "MEAN_BBYC": 32.862069, "COMPARE": 0, "ADMIN1_COD": 9, "GN_POP": 229398, "ELEVATION": 0, "GTOPO30": 31, "UN_FID": 344, "UN_ADM0": "Libyan Arab Jamahiriya", "UN_LAT": 34.34, "UN_LONG": 36, "POP1950": 106, "POP1955": 136, "POP1960": 174, "POP1965": 235, "POP1970": 398, "POP1975": 611, "POP1980": 797, "POP1985": 1056, "POP1990": 1500, "POP1995": 1678, "POP2000": 1877, "POP2005": 2098, "POP2010": 2189, "POP2015": 2322, "POP2020": 2532, "POP2025": 2713, "POP2050": 2855, "CITYALT": "Tripoli" }, "geometry": { "type": "Point", "coordinates": [ 13.183594, 32.898038 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Lome", "NAMEALT": "Lomé", "DIFFASCII": 0, "NAMEASCII": "Lome", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Togo", "SOV_A3": "TGO", "ADM0NAME": "Togo", "ADM0_A3": "TGO", "ADM1NAME": "Maritime", "ISO_A2": "TG", "LATITUDE": 6.131937, "LONGITUDE": 1.222757, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1452000, "POP_MIN": 749700, "POP_OTHER": 1256715, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 2365267, "MEGANAME": "Lomé", "LS_NAME": "Lome", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 954448, "MAX_POP20": 953569, "MAX_POP50": 954013, "MAX_POP300": 953569, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 343, "MAX_AREAKM": 364, "MIN_AREAMI": 133, "MAX_AREAMI": 140, "MIN_PERKM": 353, "MAX_PERKM": 360, "MIN_PERMI": 219, "MAX_PERMI": 224, "MIN_BBXMIN": 0.95, "MAX_BBXMIN": 0.95, "MIN_BBXMAX": 1.483333, "MAX_BBXMAX": 1.483333, "MIN_BBYMIN": 6.025, "MAX_BBYMIN": 6.025, "MIN_BBYMAX": 6.283333, "MAX_BBYMAX": 6.283333, "MEAN_BBXC": 1.190359, "MEAN_BBYC": 6.153924, "COMPARE": 0, "GN_ASCII": "Lome", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 24, "GN_POP": 749700, "ELEVATION": 0, "GTOPO30": 64, "TIMEZONE": "Africa/Lome", "GEONAMESNO": "GeoNames match general.", "UN_FID": 497, "UN_ADM0": "Togo", "UN_LAT": 6.1, "UN_LONG": 1.2, "POP1950": 33, "POP1955": 56, "POP1960": 95, "POP1965": 138, "POP1970": 192, "POP1975": 257, "POP1980": 344, "POP1985": 466, "POP1990": 619, "POP1995": 796, "POP2000": 1023, "POP2005": 1315, "POP2010": 1452, "POP2015": 1669, "POP2020": 2038, "POP2025": 2410, "POP2050": 2791, "CITYALT": "Lome" }, "geometry": { "type": "Point", "coordinates": [ 1.230469, 6.140555 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Yaounde", "NAMEALT": "Yaoundé", "DIFFASCII": 0, "NAMEASCII": "Yaounde", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Cameroon", "SOV_A3": "CMR", "ADM0NAME": "Cameroon", "ADM0_A3": "CMR", "ADM1NAME": "Centre", "ISO_A2": "CM", "LATITUDE": 3.866701, "LONGITUDE": 11.516651, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1611000, "POP_MIN": 1060587, "POP_OTHER": 1060747, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2220957, "MEGANAME": "Yaoundé", "LS_NAME": "Yaounde", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1060587, "MAX_POP20": 1060587, "MAX_POP50": 1060587, "MAX_POP300": 1060587, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 197, "MAX_AREAKM": 197, "MIN_AREAMI": 76, "MAX_AREAMI": 76, "MIN_PERKM": 116, "MAX_PERKM": 116, "MIN_PERMI": 72, "MAX_PERMI": 72, "MIN_BBXMIN": 11.433333, "MAX_BBXMIN": 11.433333, "MIN_BBXMAX": 11.6, "MAX_BBXMAX": 11.6, "MIN_BBYMIN": 3.775, "MAX_BBYMIN": 3.775, "MIN_BBYMAX": 3.983333, "MAX_BBYMAX": 3.983333, "MEAN_BBXC": 11.518344, "MEAN_BBYC": 3.865639, "COMPARE": 0, "GN_ASCII": "Yaounde", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 11, "GN_POP": 1299369, "ELEVATION": 0, "GTOPO30": 733, "TIMEZONE": "Africa/Douala", "GEONAMESNO": "GeoNames match general.", "UN_FID": 9, "UN_ADM0": "Cameroon", "UN_LAT": 3.86, "UN_LONG": 11.51, "POP1950": 32, "POP1955": 49, "POP1960": 75, "POP1965": 112, "POP1970": 183, "POP1975": 292, "POP1980": 415, "POP1985": 578, "POP1990": 754, "POP1995": 948, "POP2000": 1192, "POP2005": 1489, "POP2010": 1611, "POP2015": 1787, "POP2020": 2058, "POP2025": 2312, "POP2050": 2549, "CITYALT": "Yaounde" }, "geometry": { "type": "Point", "coordinates": [ 11.513672, 3.864255 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Bangui", "DIFFASCII": 0, "NAMEASCII": "Bangui", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Central African Republic", "SOV_A3": "CAF", "ADM0NAME": "Central African Republic", "ADM0_A3": "CAF", "ADM1NAME": "Bangui", "ISO_A2": "CF", "LATITUDE": 4.366644, "LONGITUDE": 18.558288, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 831925, "POP_MIN": 622771, "POP_OTHER": 782274, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 2389853, "LS_NAME": "Bangui", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 792886, "MAX_POP20": 792886, "MAX_POP50": 831925, "MAX_POP300": 831925, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 90, "MAX_AREAKM": 103, "MIN_AREAMI": 35, "MAX_AREAMI": 40, "MIN_PERKM": 91, "MAX_PERKM": 107, "MIN_PERMI": 57, "MAX_PERMI": 67, "MIN_BBXMIN": 18.491667, "MAX_BBXMIN": 18.491667, "MIN_BBXMAX": 18.614651, "MAX_BBXMAX": 18.625, "MIN_BBYMIN": 4.316667, "MAX_BBYMIN": 4.316667, "MIN_BBYMAX": 4.483333, "MAX_BBYMAX": 4.483333, "MEAN_BBXC": 18.546436, "MEAN_BBYC": 4.388157, "COMPARE": 0, "GN_ASCII": "Bangui", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 18, "GN_POP": 542393, "ELEVATION": 0, "GTOPO30": 373, "TIMEZONE": "Africa/Bangui", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 18.566895, 4.368320 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 3, "FEATURECLA": "Admin-0 capital", "NAME": "Cairo", "NAMEALT": "Al-Qahirah", "DIFFASCII": 0, "NAMEASCII": "Cairo", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Egypt", "SOV_A3": "EGY", "ADM0NAME": "Egypt", "ADM0_A3": "EGY", "ADM1NAME": "Al Qahirah", "ISO_A2": "EG", "LATITUDE": 30.04996, "LONGITUDE": 31.249968, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 11893000, "POP_MIN": 7734614, "POP_OTHER": 13720557, "RANK_MAX": 14, "RANK_MIN": 13, "GEONAMEID": 360630, "MEGANAME": "Al-Qahirah", "LS_NAME": "Cairo", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 14936123, "MAX_POP20": 15091561, "MAX_POP50": 29872827, "MAX_POP300": 30682197, "MAX_POP310": 30696820, "MAX_NATSCA": 300, "MIN_AREAKM": 1479, "MAX_AREAKM": 4900, "MIN_AREAMI": 571, "MAX_AREAMI": 1892, "MIN_PERKM": 1365, "MAX_PERKM": 5010, "MIN_PERMI": 848, "MAX_PERMI": 3113, "MIN_BBXMIN": 30.641667, "MAX_BBXMIN": 30.991693, "MIN_BBXMAX": 31.672096, "MAX_BBXMAX": 31.733333, "MIN_BBYMIN": 29.3, "MAX_BBYMIN": 29.8, "MIN_BBYMAX": 30.531354, "MAX_BBYMAX": 31.158333, "MEAN_BBXC": 31.273845, "MEAN_BBYC": 30.353647, "COMPARE": 0, "GN_ASCII": "Cairo", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 11, "GN_POP": 7734614, "ELEVATION": 0, "GTOPO30": 23, "TIMEZONE": "Africa/Cairo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 515, "UN_ADM0": "Egypt", "UN_LAT": 30.07, "UN_LONG": 31.25, "POP1950": 2494, "POP1955": 3029, "POP1960": 3680, "POP1965": 4738, "POP1970": 5585, "POP1975": 6450, "POP1980": 7349, "POP1985": 8328, "POP1990": 9061, "POP1995": 9707, "POP2000": 10534, "POP2005": 11487, "POP2010": 11893, "POP2015": 12503, "POP2020": 13465, "POP2025": 14451, "POP2050": 15561, "CITYALT": "Cairo" }, "geometry": { "type": "Point", "coordinates": [ 31.245117, 30.050077 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital alt", "NAME": "Tel Aviv-Yafo", "NAMEALT": "Tel Aviv-Jaffa", "DIFFASCII": 0, "NAMEASCII": "Tel Aviv-Yafo", "ADM0CAP": 0, "CAPALT": 1, "CAPIN": "While Jerulsale", "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Israel", "SOV_A3": "ISR", "ADM0NAME": "Israel", "ADM0_A3": "ISR", "ADM1NAME": "Tel Aviv", "ISO_A2": "IL", "LATITUDE": 32.079991, "LONGITUDE": 34.770012, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3112000, "POP_MIN": 378358, "POP_OTHER": 2306851, "RANK_MAX": 12, "RANK_MIN": 10, "GEONAMEID": 293394, "MEGANAME": "Tel Aviv-Yafo", "LS_NAME": "Tel Aviv-Yafo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2324568, "MAX_POP20": 2324568, "MAX_POP50": 2324568, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 50, "MIN_AREAKM": 436, "MAX_AREAKM": 436, "MIN_AREAMI": 168, "MAX_AREAMI": 168, "MIN_PERKM": 386, "MAX_PERKM": 386, "MIN_PERMI": 240, "MAX_PERMI": 240, "MIN_BBXMIN": 34.716667, "MAX_BBXMIN": 34.716667, "MIN_BBXMAX": 34.958333, "MAX_BBXMAX": 34.958333, "MIN_BBYMIN": 31.85, "MAX_BBYMIN": 31.85, "MIN_BBYMAX": 32.208333, "MAX_BBYMAX": 32.208333, "MEAN_BBXC": 34.836735, "MEAN_BBYC": 32.030266, "COMPARE": 0, "GN_ASCII": "Tel Aviv-Yafo", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 5, "GN_POP": 378358, "ELEVATION": 0, "GTOPO30": -9999, "TIMEZONE": "Asia/Jerusalem", "GEONAMESNO": "GeoNames match general.", "UN_FID": 304, "UN_ADM0": "Israel", "UN_LAT": 32.04, "UN_LONG": 34.76, "POP1950": 418, "POP1955": 556, "POP1960": 738, "POP1965": 882, "POP1970": 1029, "POP1975": 1206, "POP1980": 1416, "POP1985": 1681, "POP1990": 2026, "POP1995": 2442, "POP2000": 2752, "POP2005": 3012, "POP2010": 3112, "POP2015": 3256, "POP2020": 3453, "POP2025": 3600, "POP2050": 3726, "CITYALT": "Tel Aviv-Jaffa" }, "geometry": { "type": "Point", "coordinates": [ 34.760742, 32.082575 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Khartoum", "NAMEALT": "Al-Khartum", "DIFFASCII": 0, "NAMEASCII": "Khartoum", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Sudan", "SOV_A3": "SDN", "ADM0NAME": "Sudan", "ADM0_A3": "SDN", "ADM1NAME": "Khartoum", "ISO_A2": "SD", "LATITUDE": 15.588078, "LONGITUDE": 32.534179, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 4754000, "POP_MIN": 1974647, "POP_OTHER": 2325931, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 379252, "MEGANAME": "Al-Khartum", "LS_NAME": "Khartoum", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2395309, "MAX_POP20": 2395309, "MAX_POP50": 2395309, "MAX_POP300": 4542697, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 348, "MAX_AREAKM": 630, "MIN_AREAMI": 134, "MAX_AREAMI": 243, "MIN_PERKM": 237, "MAX_PERKM": 424, "MIN_PERMI": 147, "MAX_PERMI": 263, "MIN_BBXMIN": 32.341667, "MAX_BBXMIN": 32.458333, "MIN_BBXMAX": 32.691667, "MAX_BBXMAX": 32.691667, "MIN_BBYMIN": 15.325, "MAX_BBYMIN": 15.325, "MIN_BBYMAX": 15.699422, "MAX_BBYMAX": 15.825, "MEAN_BBXC": 32.550462, "MEAN_BBYC": 15.559101, "COMPARE": 0, "GN_ASCII": "Khartoum", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 29, "GN_POP": 1974647, "ELEVATION": 0, "GTOPO30": 378, "TIMEZONE": "Africa/Khartoum", "GEONAMESNO": "GeoNames match general.", "UN_FID": 466, "UN_ADM0": "Sudan", "UN_LAT": 15.55, "UN_LONG": 32.52, "POP1950": 183, "POP1955": 252, "POP1960": 347, "POP1965": 477, "POP1970": 657, "POP1975": 886, "POP1980": 1164, "POP1985": 1611, "POP1990": 2360, "POP1995": 3242, "POP2000": 3949, "POP2005": 4518, "POP2010": 4754, "POP2015": 5185, "POP2020": 6077, "POP2025": 7017, "POP2050": 7937, "CITYALT": "Khartoum" }, "geometry": { "type": "Point", "coordinates": [ 32.541504, 15.580711 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Sanaa", "NAMEALT": "Sana'a'", "DIFFASCII": 0, "NAMEASCII": "Sanaa", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Yemen", "SOV_A3": "YEM", "ADM0NAME": "Yemen", "ADM0_A3": "YEM", "ADM1NAME": "Amanat Al Asimah", "ISO_A2": "YE", "LATITUDE": 15.354733, "LONGITUDE": 44.206593, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2008000, "POP_MIN": 1835853, "POP_OTHER": 1742507, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 71137, "MEGANAME": "Sana'a'", "LS_NAME": "Sanaa", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1835853, "MAX_POP20": 1835853, "MAX_POP50": 1835853, "MAX_POP300": 1835853, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 160, "MAX_AREAKM": 160, "MIN_AREAMI": 62, "MAX_AREAMI": 62, "MIN_PERKM": 132, "MAX_PERKM": 132, "MIN_PERMI": 82, "MAX_PERMI": 82, "MIN_BBXMIN": 44.15, "MAX_BBXMIN": 44.15, "MIN_BBXMAX": 44.258333, "MAX_BBXMAX": 44.258333, "MIN_BBYMIN": 15.266667, "MAX_BBYMIN": 15.266667, "MIN_BBYMAX": 15.508333, "MAX_BBYMAX": 15.508333, "MEAN_BBXC": 44.206615, "MEAN_BBYC": 15.376031, "COMPARE": 0, "GN_ASCII": "Sanaa", "ADMIN1_COD": 0, "GN_POP": 0, "ELEVATION": 0, "GTOPO30": 0, "GEONAMESNO": "GeoNames match general + researched.", "UN_FID": 587, "UN_ADM0": "Yemen", "UN_LAT": 15.36, "UN_LONG": 44.2, "POP1950": 46, "POP1955": 58, "POP1960": 72, "POP1965": 89, "POP1970": 111, "POP1975": 141, "POP1980": 238, "POP1985": 402, "POP1990": 653, "POP1995": 1034, "POP2000": 1365, "POP2005": 1801, "POP2010": 2008, "POP2015": 2345, "POP2020": 2955, "POP2025": 3636, "POP2050": 4382, "CITYALT": "Sanaa" }, "geometry": { "type": "Point", "coordinates": [ 44.208984, 15.347762 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 3, "FEATURECLA": "Admin-0 capital", "NAME": "Addis Ababa", "DIFFASCII": 0, "NAMEASCII": "Addis Ababa", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Ethiopia", "SOV_A3": "ETH", "ADM0NAME": "Ethiopia", "ADM0_A3": "ETH", "ADM1NAME": "Addis Ababa", "ISO_A2": "ET", "LATITUDE": 9.03331, "LONGITUDE": 38.700004, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3100000, "POP_MIN": 2757729, "POP_OTHER": 3013653, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 344979, "MEGANAME": "Addis Ababa", "LS_NAME": "Addis Ababa", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2984087, "MAX_POP20": 3176486, "MAX_POP50": 3491912, "MAX_POP300": 3450173, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 462, "MAX_AREAKM": 1182, "MIN_AREAMI": 178, "MAX_AREAMI": 457, "MIN_PERKM": 397, "MAX_PERKM": 1325, "MIN_PERMI": 247, "MAX_PERMI": 823, "MIN_BBXMIN": 38.575, "MAX_BBXMIN": 38.575, "MIN_BBXMAX": 38.966667, "MAX_BBXMAX": 39.483333, "MIN_BBYMIN": 8.033333, "MAX_BBYMIN": 8.67178, "MIN_BBYMAX": 9.125, "MAX_BBYMAX": 9.125, "MEAN_BBXC": 38.919464, "MEAN_BBYC": 8.825709, "COMPARE": 0, "GN_ASCII": "Addis Ababa", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 44, "GN_POP": 2757729, "ELEVATION": 0, "GTOPO30": 2363, "TIMEZONE": "Africa/Addis_Ababa", "GEONAMESNO": "GeoNames match general.", "UN_FID": 180, "UN_ADM0": "Ethiopia", "UN_LAT": 9.02, "UN_LONG": 38.7, "POP1950": 392, "POP1955": 451, "POP1960": 519, "POP1965": 597, "POP1970": 729, "POP1975": 926, "POP1980": 1175, "POP1985": 1476, "POP1990": 1791, "POP1995": 2157, "POP2000": 2493, "POP2005": 2902, "POP2010": 3100, "POP2015": 3453, "POP2020": 4184, "POP2025": 5083, "POP2050": 6156 }, "geometry": { "type": "Point", "coordinates": [ 38.693848, 9.037003 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Astana", "DIFFASCII": 0, "NAMEASCII": "Astana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Kazakhstan", "SOV_A3": "KAZ", "ADM0NAME": "Kazakhstan", "ADM0_A3": "KAZ", "ADM1NAME": "Aqmola", "ISO_A2": "KZ", "LATITUDE": 51.181125, "LONGITUDE": 71.427774, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 345604, "POP_MIN": 325021, "POP_OTHER": 317445, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 1526273, "LS_NAME": "Astana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 325021, "MAX_POP20": 325021, "MAX_POP50": 325021, "MAX_POP300": 325021, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 104, "MAX_AREAKM": 104, "MIN_AREAMI": 40, "MAX_AREAMI": 40, "MIN_PERKM": 101, "MAX_PERKM": 101, "MIN_PERMI": 63, "MAX_PERMI": 63, "MIN_BBXMIN": 71.325, "MAX_BBXMIN": 71.325, "MIN_BBXMAX": 71.533333, "MAX_BBXMAX": 71.533333, "MIN_BBYMIN": 51.1, "MAX_BBYMIN": 51.1, "MIN_BBYMAX": 51.225, "MAX_BBYMAX": 51.225, "MEAN_BBXC": 71.43275, "MEAN_BBYC": 51.164443, "COMPARE": 0, "GN_ASCII": "Astana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 5, "GN_POP": 345604, "ELEVATION": 0, "GTOPO30": 339, "TIMEZONE": "Asia/Qyzylorda", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 71.433105, 51.179343 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Urumqi", "NAMEALT": "Ürümqi|Wulumqi", "DIFFASCII": 0, "NAMEASCII": "Urumqi", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "China", "SOV_A3": "CHN", "ADM0NAME": "China", "ADM0_A3": "CHN", "ADM1NAME": "Xinjiang Uygur", "ISO_A2": "CN", "LATITUDE": 43.805012, "LONGITUDE": 87.575006, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2151000, "POP_MIN": 1508225, "POP_OTHER": 2044401, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1529102, "MEGANAME": "Ürümqi (Wulumqi)", "LS_NAME": "Urumqi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2066046, "MAX_POP20": 2066046, "MAX_POP50": 2066046, "MAX_POP300": 2066046, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 361, "MAX_AREAKM": 361, "MIN_AREAMI": 139, "MAX_AREAMI": 139, "MIN_PERKM": 318, "MAX_PERKM": 318, "MIN_PERMI": 198, "MAX_PERMI": 198, "MIN_BBXMIN": 87.358333, "MAX_BBXMIN": 87.358333, "MIN_BBXMAX": 87.725, "MAX_BBXMAX": 87.725, "MIN_BBYMIN": 43.641667, "MAX_BBYMIN": 43.641667, "MIN_BBYMAX": 44.016667, "MAX_BBYMAX": 44.016667, "MEAN_BBXC": 87.578494, "MEAN_BBYC": 43.854525, "COMPARE": 0, "GN_ASCII": "Urumqi", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 13, "GN_POP": 1508225, "ELEVATION": 0, "GTOPO30": 915, "TIMEZONE": "Asia/Urumqi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 118, "UN_ADM0": "China", "UN_LAT": 43.78, "UN_LONG": 87.58, "POP1950": 253, "POP1955": 312, "POP1960": 384, "POP1965": 472, "POP1970": 581, "POP1975": 715, "POP1980": 881, "POP1985": 1029, "POP1990": 1161, "POP1995": 1417, "POP2000": 1730, "POP2005": 2025, "POP2010": 2151, "POP2015": 2340, "POP2020": 2620, "POP2025": 2851, "POP2050": 3038, "CITYALT": "Urumqi" }, "geometry": { "type": "Point", "coordinates": [ 87.583008, 43.802819 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 8, "FEATURECLA": "Admin-1 capital", "NAME": "Dubai", "NAMEPAR": "Dubayy", "DIFFASCII": 0, "NAMEASCII": "Dubai", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United Arab Emirates", "SOV_A3": "ARE", "ADM0NAME": "United Arab Emirates", "ADM0_A3": "ARE", "ADM1NAME": "Dubay", "ISO_A2": "AE", "LATITUDE": 25.229996, "LONGITUDE": 55.279974, "CHANGED": 1, "NAMEDIFF": 1, "DIFFNOTE": "Name changed.", "POP_MAX": 1379000, "POP_MIN": 1137347, "POP_OTHER": 1166878, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 292223, "MEGANAME": "Dubayy", "LS_NAME": "Dubayy", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1193251, "MAX_POP20": 2244726, "MAX_POP50": 2244726, "MAX_POP300": 2244726, "MAX_POP310": 2244726, "MAX_NATSCA": 300, "MIN_AREAKM": 187, "MAX_AREAKM": 407, "MIN_AREAMI": 72, "MAX_AREAMI": 157, "MIN_PERKM": 158, "MAX_PERKM": 278, "MIN_PERMI": 98, "MAX_PERMI": 173, "MIN_BBXMIN": 55.175, "MAX_BBXMIN": 55.175, "MIN_BBXMAX": 55.437142, "MAX_BBXMAX": 55.533333, "MIN_BBYMIN": 25.1, "MAX_BBYMIN": 25.1, "MIN_BBYMAX": 25.308333, "MAX_BBYMAX": 25.433333, "MEAN_BBXC": 55.361736, "MEAN_BBYC": 25.258666, "COMPARE": 1, "GN_ASCII": "Dubai", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 3, "GN_POP": 1137347, "ELEVATION": 0, "GTOPO30": 9, "TIMEZONE": "Asia/Dubai", "GEONAMESNO": "GeoNames match general.", "UN_FID": 498, "UN_ADM0": "United Arab Emirates", "UN_LAT": 25.27, "UN_LONG": 55.32, "POP1950": 20, "POP1955": 28, "POP1960": 40, "POP1965": 51, "POP1970": 80, "POP1975": 167, "POP1980": 254, "POP1985": 345, "POP1990": 473, "POP1995": 650, "POP2000": 938, "POP2005": 1272, "POP2010": 1379, "POP2015": 1516, "POP2020": 1709, "POP2025": 1894, "POP2050": 2077, "CITYALT": "Dubai" }, "geometry": { "type": "Point", "coordinates": [ 55.283203, 25.224820 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Ashgabat", "DIFFASCII": 0, "NAMEASCII": "Ashgabat", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Turkmenistan", "SOV_A3": "TKM", "ADM0NAME": "Turkmenistan", "ADM0_A3": "TKM", "ADM1NAME": "Ahal", "ISO_A2": "TM", "LATITUDE": 37.949995, "LONGITUDE": 58.383299, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 727700, "POP_MIN": 577982, "POP_OTHER": 556048, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 162183, "LS_NAME": "Ashgabat", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 577982, "MAX_POP20": 589324, "MAX_POP50": 589324, "MAX_POP300": 589324, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 108, "MAX_AREAKM": 128, "MIN_AREAMI": 42, "MAX_AREAMI": 49, "MIN_PERKM": 109, "MAX_PERKM": 144, "MIN_PERMI": 68, "MAX_PERMI": 90, "MIN_BBXMIN": 58.2, "MAX_BBXMIN": 58.28637, "MIN_BBXMAX": 58.483333, "MAX_BBXMAX": 58.483333, "MIN_BBYMIN": 37.866667, "MAX_BBYMIN": 37.866667, "MIN_BBYMAX": 38.016667, "MAX_BBYMAX": 38.016667, "MEAN_BBXC": 58.371343, "MEAN_BBYC": 37.94619, "COMPARE": 0, "GN_ASCII": "Ashgabat", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 727700, "ELEVATION": 0, "GTOPO30": 219, "TIMEZONE": "Asia/Ashgabat", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 58.381348, 37.944198 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Mogadishu", "NAMEALT": "Muqdisho", "DIFFASCII": 0, "NAMEASCII": "Mogadishu", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Somalia", "SOV_A3": "SOM", "ADM0NAME": "Somalia", "ADM0_A3": "SOM", "ADM1NAME": "Banaadir", "ISO_A2": "SO", "LATITUDE": 2.066681, "LONGITUDE": 45.366678, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1100000, "POP_MIN": 875388, "POP_OTHER": 849392, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 53654, "MEGANAME": "Muqdisho", "LS_NAME": "Mogadishu", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 875388, "MAX_POP20": 875388, "MAX_POP50": 875388, "MAX_POP300": 875388, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 99, "MAX_AREAKM": 99, "MIN_AREAMI": 38, "MAX_AREAMI": 38, "MIN_PERKM": 68, "MAX_PERKM": 68, "MIN_PERMI": 43, "MAX_PERMI": 43, "MIN_BBXMIN": 45.25, "MAX_BBXMIN": 45.25, "MIN_BBXMAX": 45.416667, "MAX_BBXMAX": 45.416667, "MIN_BBYMIN": 2, "MAX_BBYMIN": 2, "MIN_BBYMAX": 2.116667, "MAX_BBYMAX": 2.116667, "MEAN_BBXC": 45.331178, "MEAN_BBYC": 2.054239, "COMPARE": 0, "GN_ASCII": "Mogadishu", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 2587183, "ELEVATION": 0, "GTOPO30": 39, "TIMEZONE": "Africa/Mogadishu", "GEONAMESNO": "GeoNames match general.", "UN_FID": 454, "UN_ADM0": "Somalia", "UN_LAT": 2.04, "UN_LONG": 45.34, "POP1950": 69, "POP1955": 73, "POP1960": 94, "POP1965": 146, "POP1970": 272, "POP1975": 445, "POP1980": 551, "POP1985": 747, "POP1990": 1035, "POP1995": 1147, "POP2000": 1201, "POP2005": 1415, "POP2010": 1100, "POP2015": 1500, "POP2020": 1794, "POP2025": 2142, "POP2050": 2529, "CITYALT": "Mogadishu" }, "geometry": { "type": "Point", "coordinates": [ 45.373535, 2.064982 ] } }
,
@@ -342,7 +338,7 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Kathmandu", "DIFFASCII": 0, "NAMEASCII": "Kathmandu", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Nepal", "SOV_A3": "NPL", "ADM0NAME": "Nepal", "ADM0_A3": "NPL", "ADM1NAME": "Bhaktapur", "ISO_A2": "NP", "LATITUDE": 27.716692, "LONGITUDE": 85.316642, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 895000, "POP_MIN": 895000, "POP_OTHER": 1099610, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 1283240, "MEGANAME": "Kathmandu", "LS_NAME": "Kathmandu", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1154222, "MAX_POP20": 2297630, "MAX_POP50": 2297630, "MAX_POP300": 2297630, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 233, "MAX_AREAKM": 580, "MIN_AREAMI": 90, "MAX_AREAMI": 224, "MIN_PERKM": 228, "MAX_PERKM": 511, "MIN_PERMI": 142, "MAX_PERMI": 318, "MIN_BBXMIN": 85.108333, "MAX_BBXMIN": 85.108333, "MIN_BBXMAX": 85.450066, "MAX_BBXMAX": 85.675, "MIN_BBYMIN": 27.541667, "MAX_BBYMIN": 27.669456, "MIN_BBYMAX": 27.85, "MAX_BBYMAX": 27.85, "MEAN_BBXC": 85.356097, "MEAN_BBYC": 27.697735, "COMPARE": 0, "GN_ASCII": "Kathmandu", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 1442271, "ELEVATION": 1317, "GTOPO30": 1304, "TIMEZONE": "Asia/Kathmandu", "GEONAMESNO": "GeoNames match general.", "UN_FID": 378, "UN_ADM0": "Nepal", "UN_LAT": 27.71, "UN_LONG": 85.31, "POP1950": 104, "POP1955": 110, "POP1960": 119, "POP1965": 132, "POP1970": 147, "POP1975": 180, "POP1980": 225, "POP1985": 297, "POP1990": 398, "POP1995": 509, "POP2000": 644, "POP2005": 815, "POP2010": 895, "POP2015": 1029, "POP2020": 1284, "POP2025": 1578, "POP2050": 1907 }, "geometry": { "type": "Point", "coordinates": [ 85.319824, 27.722436 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Male", "DIFFASCII": 0, "NAMEASCII": "Male", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Maldives", "SOV_A3": "MDV", "ADM0NAME": "Maldives", "ADM0_A3": "MDV", "ISO_A2": "MV", "LATITUDE": 4.166708, "LONGITUDE": 73.499947, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 112927, "POP_MIN": 103693, "POP_OTHER": 0, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 3174186, "LS_NAME": "Male", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 112927, "MAX_POP20": 112927, "MAX_POP50": 112927, "MAX_POP300": 112927, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 73.5, "MAX_BBXMIN": 73.5, "MIN_BBXMAX": 73.516667, "MAX_BBXMAX": 73.516667, "MIN_BBYMIN": 4.166667, "MAX_BBYMIN": 4.166667, "MIN_BBYMAX": 4.183333, "MAX_BBYMAX": 4.183333, "MEAN_BBXC": 73.508333, "MEAN_BBYC": 4.175, "COMPARE": 0, "GN_ASCII": "Male", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 17, "GN_POP": 2138, "ELEVATION": 0, "GTOPO30": 672, "TIMEZONE": "Europe/Rome", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 73.498535, 4.171115 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Colombo", "DIFFASCII": 0, "NAMEASCII": "Colombo", "ADM0CAP": 1, "CAPALT": 0, "CAPIN": "De facto, admin", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Sri Lanka", "SOV_A3": "LKA", "ADM0NAME": "Sri Lanka", "ADM0_A3": "LKA", "ADM1NAME": "Colombo", "ISO_A2": "LK", "LATITUDE": 6.931966, "LONGITUDE": 79.857751, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 217000, "POP_MIN": 217000, "POP_OTHER": 2490974, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 3465927, "LS_NAME": "Colombo", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2664418, "MAX_POP20": 2742979, "MAX_POP50": 2742979, "MAX_POP300": 9759831, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 1054, "MAX_AREAKM": 6238, "MIN_AREAMI": 407, "MAX_AREAMI": 2408, "MIN_PERKM": 847, "MAX_PERKM": 5343, "MIN_PERMI": 526, "MAX_PERMI": 3320, "MIN_BBXMIN": 79.8, "MAX_BBXMIN": 79.8, "MIN_BBXMAX": 80.097553, "MAX_BBXMAX": 80.833333, "MIN_BBYMIN": 5.916667, "MAX_BBYMIN": 6.854447, "MIN_BBYMAX": 7.633333, "MAX_BBYMAX": 7.8, "MEAN_BBXC": 79.996849, "MEAN_BBYC": 7.222799, "COMPARE": 0, "GN_ASCII": "Colombo", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 18, "GN_POP": 217000, "ELEVATION": 0, "GTOPO30": 927, "TIMEZONE": "America/Sao_Paulo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 79.848633, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Dhaka", "DIFFASCII": 0, "NAMEASCII": "Dhaka", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Bangladesh", "SOV_A3": "BGD", "ADM0NAME": "Bangladesh", "ADM0_A3": "BGD", "ADM1NAME": "Dhaka", "ISO_A2": "BD", "LATITUDE": 23.72306, "LONGITUDE": 90.408579, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 12797394, "POP_MIN": 7000940, "POP_OTHER": 14995538, "RANK_MAX": 14, "RANK_MIN": 13, "GEONAMEID": 1185241, "MEGANAME": "Dhaka", "LS_NAME": "Dhaka", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 14548962, "MAX_POP20": 21394172, "MAX_POP50": 53845691, "MAX_POP300": 78549234, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3528, "MAX_AREAKM": 49912, "MIN_AREAMI": 1362, "MAX_AREAMI": 19271, "MIN_PERKM": 1439, "MAX_PERKM": 19314, "MIN_PERMI": 894, "MAX_PERMI": 12001, "MIN_BBXMIN": 88.133791, "MAX_BBXMIN": 89.9, "MIN_BBXMAX": 90.816777, "MAX_BBXMAX": 92.908333, "MIN_BBYMIN": 22.858333, "MAX_BBYMIN": 23.482936, "MIN_BBYMAX": 24.247407, "MAX_BBYMAX": 25.583333, "MEAN_BBXC": 90.400679, "MEAN_BBYC": 24.105092, "COMPARE": 0, "GN_ASCII": "Dhaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 81, "GN_POP": 10356500, "ELEVATION": 0, "GTOPO30": 4, "TIMEZONE": "Asia/Dhaka", "GEONAMESNO": "GeoNames match general.", "UN_FID": 369, "UN_ADM0": "Bangladesh", "UN_LAT": 23.7, "UN_LONG": 90.4, "POP1950": 336, "POP1955": 409, "POP1960": 508, "POP1965": 821, "POP1970": 1374, "POP1975": 2221, "POP1980": 3266, "POP1985": 4660, "POP1990": 6621, "POP1995": 8332, "POP2000": 10285, "POP2005": 12576, "POP2010": 13485, "POP2015": 14796, "POP2020": 17015, "POP2025": 19422, "POP2050": 22015 }, "geometry": { "type": "Point", "coordinates": [ 90.417480, 23.725012 ] } }
,
@@ -386,7 +382,7 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Kuala Lumpur", "DIFFASCII": 0, "NAMEASCII": "Kuala Lumpur", "ADM0CAP": 1, "CAPALT": 0, "CAPIN": "Official and le", "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Malaysia", "SOV_A3": "MYS", "ADM0NAME": "Malaysia", "ADM0_A3": "MYS", "ADM1NAME": "Selangor", "ISO_A2": "MY", "LATITUDE": 3.166666, "LONGITUDE": 101.699983, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1448000, "POP_MIN": 1448000, "POP_OTHER": 2667990, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1735161, "MEGANAME": "Kuala Lumpur", "LS_NAME": "Kuala Lumpur", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2750755, "MAX_POP20": 2750755, "MAX_POP50": 3468789, "MAX_POP300": 4983714, "MAX_POP310": 4983714, "MAX_NATSCA": 300, "MIN_AREAKM": 666, "MAX_AREAKM": 1700, "MIN_AREAMI": 257, "MAX_AREAMI": 657, "MIN_PERKM": 350, "MAX_PERKM": 1111, "MIN_PERMI": 217, "MAX_PERMI": 690, "MIN_BBXMIN": 101.358333, "MAX_BBXMIN": 101.491667, "MIN_BBXMAX": 101.841667, "MAX_BBXMAX": 101.891667, "MIN_BBYMIN": 2.7, "MAX_BBYMIN": 3.040173, "MIN_BBYMAX": 3.475, "MAX_BBYMAX": 3.475, "MEAN_BBXC": 101.644598, "MEAN_BBYC": 3.131431, "COMPARE": 0, "GN_ASCII": "Kuala Lumpur", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 14, "GN_POP": 1453975, "ELEVATION": 0, "GTOPO30": 62, "TIMEZONE": "Asia/Kuala_Lumpur", "GEONAMESNO": "GeoNames match general.", "UN_FID": 348, "UN_ADM0": "Malaysia", "UN_LAT": 3.14, "UN_LONG": 101.7, "POP1950": 208, "POP1955": 281, "POP1960": 344, "POP1965": 394, "POP1970": 451, "POP1975": 645, "POP1980": 921, "POP1985": 1016, "POP1990": 1120, "POP1995": 1213, "POP2000": 1306, "POP2005": 1405, "POP2010": 1448, "POP2015": 1519, "POP2020": 1670, "POP2025": 1820, "POP2050": 1938 }, "geometry": { "type": "Point", "coordinates": [ 101.689453, 3.162456 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 0, "FEATURECLA": "Admin-0 region capital", "NAME": "Hong Kong", "DIFFASCII": 0, "NAMEASCII": "Hong Kong", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "China", "SOV_A3": "CHN", "ADM0NAME": "Hong Kong S.A.R.", "ADM0_A3": "HKG", "ISO_A2": "HK", "LATITUDE": 22.304981, "LONGITUDE": 114.185009, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 7206000, "POP_MIN": 4551579, "POP_OTHER": 4549026, "RANK_MAX": 13, "RANK_MIN": 12, "GEONAMEID": 1819729, "MEGANAME": "Hong Kong", "LS_NAME": "Hong Kong", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 4551579, "MAX_POP20": 15779579, "MAX_POP50": 16718429, "MAX_POP300": 16718429, "MAX_POP310": 42594594, "MAX_NATSCA": 300, "MIN_AREAKM": 202, "MAX_AREAKM": 10661, "MIN_AREAMI": 78, "MAX_AREAMI": 4116, "MIN_PERKM": 219, "MAX_PERKM": 7493, "MIN_PERMI": 136, "MAX_PERMI": 4656, "MIN_BBXMIN": 112.533333, "MAX_BBXMIN": 113.983333, "MIN_BBXMAX": 114.3, "MAX_BBXMAX": 114.775, "MIN_BBYMIN": 21.925, "MAX_BBYMIN": 22.2, "MIN_BBYMAX": 22.4, "MAX_BBYMAX": 24.033333, "MEAN_BBXC": 114.035195, "MEAN_BBYC": 22.679605, "COMPARE": 0, "GN_ASCII": "Hong Kong", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 7012738, "ELEVATION": 0, "GTOPO30": -9999, "TIMEZONE": "Asia/Hong_Kong", "GEONAMESNO": "GeoNames match general.", "UN_FID": 210, "UN_ADM0": "China, Hong Kong Special Administrative Region", "UN_LAT": 22.27, "UN_LONG": 114.17, "POP1950": 1682, "POP1955": 2121, "POP1960": 2620, "POP1965": 3191, "POP1970": 3458, "POP1975": 3943, "POP1980": 4609, "POP1985": 5070, "POP1990": 5677, "POP1995": 6206, "POP2000": 6662, "POP2005": 7057, "POP2010": 7206, "POP2015": 7419, "POP2020": 7744, "POP2025": 8040, "POP2050": 8305 }, "geometry": { "type": "Point", "coordinates": [ 114.191895, 22.309426 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Shanghai", "DIFFASCII": 0, "NAMEASCII": "Shanghai", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "China", "SOV_A3": "CHN", "ADM0NAME": "China", "ADM0_A3": "CHN", "ADM1NAME": "Shanghai", "ISO_A2": "CN", "LATITUDE": 31.216452, "LONGITUDE": 121.436505, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 14987000, "POP_MIN": 14608512, "POP_OTHER": 16803572, "RANK_MAX": 14, "RANK_MIN": 14, "GEONAMEID": 1796236, "MEGANAME": "Shanghai", "LS_NAME": "Shanghai", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 16172884, "MAX_POP20": 16172884, "MAX_POP50": 26630672, "MAX_POP300": 26631586, "MAX_POP310": 40576904, "MAX_NATSCA": 300, "MIN_AREAKM": 3792, "MAX_AREAKM": 16400, "MIN_AREAMI": 1464, "MAX_AREAMI": 6332, "MIN_PERKM": 2219, "MAX_PERKM": 12342, "MIN_PERMI": 1379, "MAX_PERMI": 7669, "MIN_BBXMIN": 119.016667, "MAX_BBXMIN": 121.013757, "MIN_BBXMAX": 121.9, "MAX_BBXMAX": 121.9, "MIN_BBYMIN": 30.191667, "MAX_BBYMIN": 30.7, "MIN_BBYMAX": 31.65, "MAX_BBYMAX": 32.308333, "MEAN_BBXC": 121.053901, "MEAN_BBYC": 31.253289, "COMPARE": 0, "GN_ASCII": "Shanghai", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 23, "GN_POP": 14608512, "ELEVATION": 0, "GTOPO30": 6, "TIMEZONE": "Asia/Shanghai", "GEONAMESNO": "GeoNames match general.", "UN_FID": 98, "UN_ADM0": "China", "UN_LAT": 31.24, "UN_LONG": 121.47, "POP1950": 6066, "POP1955": 6299, "POP1960": 6542, "POP1965": 6793, "POP1970": 7055, "POP1975": 7326, "POP1980": 7608, "POP1985": 7901, "POP1990": 8205, "POP1995": 10423, "POP2000": 13243, "POP2005": 14503, "POP2010": 14987, "POP2015": 15789, "POP2020": 17214, "POP2025": 18466, "POP2050": 19412 }, "geometry": { "type": "Point", "coordinates": [ 121.442871, 31.222197 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital alt", "NAME": "Baguio City", "DIFFASCII": 0, "NAMEASCII": "Baguio City", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Philippines", "SOV_A3": "PHL", "ADM0NAME": "Philippines", "ADM0_A3": "PHL", "ADM1NAME": "Benguet", "ISO_A2": "PH", "LATITUDE": 16.429991, "LONGITUDE": 120.569943, "CHANGED": 40, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 447824, "POP_MIN": 272714, "POP_OTHER": 164877, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 1728930, "LS_NAME": "Baguio City", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 447824, "MAX_POP20": 447824, "MAX_POP50": 447824, "MAX_POP300": 447824, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 89, "MAX_AREAKM": 89, "MIN_AREAMI": 34, "MAX_AREAMI": 34, "MIN_PERKM": 78, "MAX_PERKM": 78, "MIN_PERMI": 48, "MAX_PERMI": 48, "MIN_BBXMIN": 120.541667, "MAX_BBXMIN": 120.541667, "MIN_BBXMAX": 120.65, "MAX_BBXMAX": 120.65, "MIN_BBYMIN": 16.358333, "MAX_BBYMIN": 16.358333, "MIN_BBYMAX": 16.483333, "MAX_BBYMAX": 16.483333, "MEAN_BBXC": 120.598765, "MEAN_BBYC": 16.421065, "COMPARE": 0, "GN_ASCII": "Baguio", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 272714, "ELEVATION": 0, "GTOPO30": 1448, "TIMEZONE": "Asia/Manila", "GEONAMESNO": "GeoNames spatial join with similar names only.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.563965, 16.425548 ] } }
,
@@ -396,7 +392,7 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Palikir", "DIFFASCII": 0, "NAMEASCII": "Palikir", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Federated States of Micronesia", "SOV_A3": "FSM", "ADM0NAME": "Federated States of Micronesia", "ADM0_A3": "FSM", "ISO_A2": "FM", "LATITUDE": 6.916644, "LONGITUDE": 158.149974, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 4645, "POP_MIN": 4645, "POP_OTHER": 0, "RANK_MAX": 4, "RANK_MIN": 4, "GEONAMEID": 2081986, "LS_NAME": "Palikir", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 412, "MAX_POP20": 412, "MAX_POP50": 412, "MAX_POP300": 412, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 1, "MAX_AREAKM": 1, "MIN_AREAMI": 0, "MAX_AREAMI": 0, "MIN_PERKM": 4, "MAX_PERKM": 4, "MIN_PERMI": 2, "MAX_PERMI": 2, "MIN_BBXMIN": 158.158333, "MAX_BBXMIN": 158.158333, "MIN_BBXMAX": 158.166667, "MAX_BBXMAX": 158.166667, "MIN_BBYMIN": 6.908333, "MAX_BBYMIN": 6.908333, "MIN_BBYMAX": 6.916667, "MAX_BBYMAX": 6.916667, "MEAN_BBXC": 158.1625, "MEAN_BBYC": 6.9125, "COMPARE": 0, "GN_ASCII": "Palikir", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 4645, "ELEVATION": 0, "GTOPO30": 159, "TIMEZONE": "Pacific/Ponape", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 158.159180, 6.926427 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Majuro", "DIFFASCII": 0, "NAMEASCII": "Majuro", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Marshall Islands", "SOV_A3": "MHL", "ADM0NAME": "Marshall Islands", "ADM0_A3": "MHL", "ISO_A2": "MH", "LATITUDE": 7.103004, "LONGITUDE": 171.38, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 25400, "POP_MIN": 20500, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2113779, "LS_NAME": "Majuro", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2084, "MAX_POP20": 2084, "MAX_POP50": 2084, "MAX_POP300": 2084, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 171.366667, "MAX_BBXMIN": 171.366667, "MIN_BBXMAX": 171.375, "MAX_BBXMAX": 171.375, "MIN_BBYMIN": 7.091667, "MAX_BBYMIN": 7.091667, "MIN_BBYMAX": 7.116667, "MAX_BBYMAX": 7.116667, "MEAN_BBXC": 171.370833, "MEAN_BBYC": 7.104167, "COMPARE": 0, "GN_ASCII": "Majuro", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 20500, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Majuro", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.386719, 7.100893 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Tarawa", "DIFFASCII": 0, "NAMEASCII": "Tarawa", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Kiribati", "SOV_A3": "KIR", "ADM0NAME": "Kiribati", "ADM0_A3": "KIR", "ISO_A2": "KI", "LATITUDE": 1.338188, "LONGITUDE": 173.017571, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Location adjusted. Changed scale rank.", "POP_MAX": 28802, "POP_MIN": 22534, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2110079, "LS_NAME": "Tarawa", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 22534, "MAX_POP20": 22534, "MAX_POP50": 22534, "MAX_POP300": 22534, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 12, "MAX_AREAKM": 12, "MIN_AREAMI": 5, "MAX_AREAMI": 5, "MIN_PERKM": 28, "MAX_PERKM": 28, "MIN_PERMI": 17, "MAX_PERMI": 17, "MIN_BBXMIN": 172.966667, "MAX_BBXMIN": 172.966667, "MIN_BBXMAX": 173.058333, "MAX_BBXMAX": 173.058333, "MIN_BBYMIN": 1.325, "MAX_BBYMIN": 1.325, "MIN_BBYMAX": 1.358333, "MAX_BBYMAX": 1.358333, "MEAN_BBXC": 173.015476, "MEAN_BBYC": 1.33869, "COMPARE": 0, "GN_ASCII": "Tarawa", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 28802, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Tarawa", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 173.012695, 1.340210 ] } }
] }
] }
] }
@@ -5,7 +5,7 @@
"description": "tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--order-by_NAME.json.check.mbtiles",
"format": "pbf",
"generator_options": "./tippecanoe -q -a@ -f -o tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--order-by_NAME.json.check.mbtiles -z0 -r2 -B3 -yNAME --retain-points-multiplier 3 --order-by NAME tests/ne_110m_populated_places/in.json",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{\"NAME\":\"String\"}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"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\"]}]}]}}",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{\"NAME\":\"String\",\"tippecanoe:retain_points_multiplier_first\":\"Boolean\",\"tippecanoe:retain_points_multiplier_sequence\":\"Number\"}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"count\":243,\"geometry\":\"Point\",\"attributeCount\":3,\"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\"]},{\"attribute\":\"tippecanoe:retain_points_multiplier_first\",\"count\":1,\"type\":\"boolean\",\"values\":[true]},{\"attribute\":\"tippecanoe:retain_points_multiplier_sequence\",\"count\":93,\"type\":\"number\",\"values\":[0,1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32,33,34,35,36,37,38,39,4,40,41,42,43,44,45,46,47,48,49,5,50,51,52,53,54,55,56,57,58,59,6,60,61,62,63,64,65,66,67,68,69,7,70,71,72,73,74,75,76,77,78,79,8,80,81,82,83,84,85,86,87,88,89,9,90,91,92],\"min\":0,\"max\":92}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--order-by_NAME.json.check.mbtiles",
@@ -5,7 +5,7 @@
"description": "tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--preserve-input-order.json.check.mbtiles",
"format": "pbf",
"generator_options": "./tippecanoe -q -a@ -f -o tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--preserve-input-order.json.check.mbtiles -z0 -r2 -B3 -yNAME --retain-points-multiplier 3 --preserve-input-order tests/ne_110m_populated_places/in.json",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{\"NAME\":\"String\"}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"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\"]}]}]}}",
"json": "{\"vector_layers\":[{\"id\":\"in\",\"description\":\"\",\"minzoom\":0,\"maxzoom\":0,\"fields\":{\"NAME\":\"String\",\"tippecanoe:retain_points_multiplier_first\":\"Boolean\",\"tippecanoe:retain_points_multiplier_sequence\":\"Number\"}}],\"tilestats\":{\"layerCount\":1,\"layers\":[{\"layer\":\"in\",\"count\":243,\"geometry\":\"Point\",\"attributeCount\":3,\"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\"]},{\"attribute\":\"tippecanoe:retain_points_multiplier_first\",\"count\":1,\"type\":\"boolean\",\"values\":[true]},{\"attribute\":\"tippecanoe:retain_points_multiplier_sequence\",\"count\":93,\"type\":\"number\",\"values\":[0,1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32,33,34,35,36,37,38,39,4,40,41,42,43,44,45,46,47,48,49,5,50,51,52,53,54,55,56,57,58,59,6,60,61,62,63,64,65,66,67,68,69,7,70,71,72,73,74,75,76,77,78,79,8,80,81,82,83,84,85,86,87,88,89,9,90,91,92],\"min\":0,\"max\":92}]}]}}",
"maxzoom": "0",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z0_-r2_-B3_-yNAME_--retain-points-multiplier_3_--preserve-input-order.json.check.mbtiles",
@@ -9,7 +9,7 @@
"maxzoom": "1",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z1_-M10000_--coalesce-smallest-as-needed.json.check.mbtiles",
"strategies": "[{\"dropped_by_rate\":145,\"coalesced_as_needed\":74,\"tile_size_desired\":32942},{\"coalesced_as_needed\":226,\"tile_size_desired\":44415}]",
"strategies": "[{\"dropped_by_rate\":145,\"coalesced_as_needed\":77,\"tile_size_desired\":33283},{\"coalesced_as_needed\":226,\"tile_size_desired\":44899}]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -17,11 +17,11 @@
{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 2, "FEATURECLA": "Populated place", "NAME": "Vancouver", "DIFFASCII": 0, "NAMEASCII": "Vancouver", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Canada", "SOV_A3": "CAN", "ADM0NAME": "Canada", "ADM0_A3": "CAN", "ADM1NAME": "British Columbia", "ISO_A2": "CA", "LATITUDE": 49.273417, "LONGITUDE": -123.121644, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2313328, "POP_MIN": 603502, "POP_OTHER": 482002, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 6173331, "MEGANAME": "Vancouver", "LS_NAME": "Vancouver2", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1590116, "MAX_POP20": 1588839, "MAX_POP50": 1590116, "MAX_POP300": 1590116, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 706, "MAX_AREAKM": 708, "MIN_AREAMI": 273, "MAX_AREAMI": 273, "MIN_PERKM": 398, "MAX_PERKM": 405, "MIN_PERMI": 248, "MAX_PERMI": 251, "MIN_BBXMIN": -123.283333, "MAX_BBXMIN": -123.283333, "MIN_BBXMAX": -122.708333, "MAX_BBXMAX": -122.708333, "MIN_BBYMIN": 49.1, "MAX_BBYMIN": 49.1, "MIN_BBYMAX": 49.383333, "MAX_BBYMAX": 49.383333, "MEAN_BBXC": -122.982768, "MEAN_BBYC": 49.228888, "COMPARE": 0, "GN_ASCII": "Vancouver", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 2, "GN_POP": 1837969, "ELEVATION": 0, "GTOPO30": 63, "TIMEZONE": "America/Vancouver", "GEONAMESNO": "Geonames ascii name + lat.d + long.d matching.", "UN_FID": 15, "UN_ADM0": "Canada", "UN_LAT": 49.27, "UN_LONG": -122.96, "POP1950": 556, "POP1955": 588, "POP1960": 620, "POP1965": 836, "POP1970": 1045, "POP1975": 1150, "POP1980": 1247, "POP1985": 1359, "POP1990": 1559, "POP1995": 1789, "POP2000": 1959, "POP2005": 2093, "POP2010": 2146, "POP2015": 2219, "POP2020": 2310, "POP2025": 2380, "POP2050": 2444 }, "geometry": { "type": "Point", "coordinates": [ -123.134766, 49.267805 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Populated place", "NAME": "Los Angeles", "NAMEALT": "Los Angeles-Long Beach-Santa Ana", "DIFFASCII": 0, "NAMEASCII": "Los Angeles", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United States", "SOV_A3": "USA", "ADM0NAME": "United States of America", "ADM0_A3": "USA", "ADM1NAME": "California", "ISO_A2": "US", "LATITUDE": 33.989978, "LONGITUDE": -118.179981, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 12500000, "POP_MIN": 3694820, "POP_OTHER": 142265, "RANK_MAX": 14, "RANK_MIN": 12, "GEONAMEID": 5368361, "MEGANAME": "Los Angeles-Long Beach-Santa Ana", "LS_NAME": "Los Angeles1", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 4976870, "MAX_POP20": 6558538, "MAX_POP50": 14868745, "MAX_POP300": 14870543, "MAX_POP310": 14903021, "MAX_NATSCA": 300, "MIN_AREAKM": 1338, "MAX_AREAKM": 5803, "MIN_AREAMI": 517, "MAX_AREAMI": 2241, "MIN_PERKM": 534, "MAX_PERKM": 2202, "MIN_PERMI": 332, "MAX_PERMI": 1369, "MIN_BBXMIN": -118.991667, "MAX_BBXMIN": -118.966667, "MIN_BBXMAX": -117.857183, "MAX_BBXMAX": -117.008333, "MIN_BBYMIN": 33.391667, "MAX_BBYMIN": 33.862631, "MIN_BBYMAX": 34.241667, "MAX_BBYMAX": 34.333333, "MEAN_BBXC": -118.107478, "MEAN_BBYC": 33.980609, "COMPARE": 0, "GN_ASCII": "Los Angeles", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 3694820, "ELEVATION": 89, "GTOPO30": 115, "TIMEZONE": "America/Los_Angeles", "GEONAMESNO": "GeoNames match with ascii name + lat + long whole numbers.", "UN_FID": 547, "UN_ADM0": "United States of America", "UN_LAT": 34, "UN_LONG": -118.25, "POP1950": 4046, "POP1955": 5154, "POP1960": 6530, "POP1965": 7408, "POP1970": 8378, "POP1975": 8926, "POP1980": 9512, "POP1985": 10181, "POP1990": 10883, "POP1995": 11339, "POP2000": 11814, "POP2005": 12307, "POP2010": 12500, "POP2015": 12773, "POP2020": 13160, "POP2025": 13461, "POP2050": 13672, "CITYALT": "Los Angeles" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -118.125000, 33.943360 ], [ -90.527344, 14.604847 ], [ -79.365234, 43.707594 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 1, "FEATURECLA": "Populated place", "NAME": "Los Angeles", "NAMEALT": "Los Angeles-Long Beach-Santa Ana", "DIFFASCII": 0, "NAMEASCII": "Los Angeles", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United States", "SOV_A3": "USA", "ADM0NAME": "United States of America", "ADM0_A3": "USA", "ADM1NAME": "California", "ISO_A2": "US", "LATITUDE": 33.989978, "LONGITUDE": -118.179981, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 12500000, "POP_MIN": 3694820, "POP_OTHER": 142265, "RANK_MAX": 14, "RANK_MIN": 12, "GEONAMEID": 5368361, "MEGANAME": "Los Angeles-Long Beach-Santa Ana", "LS_NAME": "Los Angeles1", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 4976870, "MAX_POP20": 6558538, "MAX_POP50": 14868745, "MAX_POP300": 14870543, "MAX_POP310": 14903021, "MAX_NATSCA": 300, "MIN_AREAKM": 1338, "MAX_AREAKM": 5803, "MIN_AREAMI": 517, "MAX_AREAMI": 2241, "MIN_PERKM": 534, "MAX_PERKM": 2202, "MIN_PERMI": 332, "MAX_PERMI": 1369, "MIN_BBXMIN": -118.991667, "MAX_BBXMIN": -118.966667, "MIN_BBXMAX": -117.857183, "MAX_BBXMAX": -117.008333, "MIN_BBYMIN": 33.391667, "MAX_BBYMIN": 33.862631, "MIN_BBYMAX": 34.241667, "MAX_BBYMAX": 34.333333, "MEAN_BBXC": -118.107478, "MEAN_BBYC": 33.980609, "COMPARE": 0, "GN_ASCII": "Los Angeles", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 3694820, "ELEVATION": 89, "GTOPO30": 115, "TIMEZONE": "America/Los_Angeles", "GEONAMESNO": "GeoNames match with ascii name + lat + long whole numbers.", "UN_FID": 547, "UN_ADM0": "United States of America", "UN_LAT": 34, "UN_LONG": -118.25, "POP1950": 4046, "POP1955": 5154, "POP1960": 6530, "POP1965": 7408, "POP1970": 8378, "POP1975": 8926, "POP1980": 9512, "POP1985": 10181, "POP1990": 10883, "POP1995": 11339, "POP2000": 11814, "POP2005": 12307, "POP2010": 12500, "POP2015": 12773, "POP2020": 13160, "POP2025": 13461, "POP2050": 13672, "CITYALT": "Los Angeles" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -118.125000, 33.943360 ], [ -100.283203, 25.641526 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 2, "FEATURECLA": "Admin-1 capital", "NAME": "Monterrey", "DIFFASCII": 0, "NAMEASCII": "Monterrey", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Mexico", "SOV_A3": "MEX", "ADM0NAME": "Mexico", "ADM0_A3": "MEX", "ADM1NAME": "Nuevo León", "ISO_A2": "MX", "LATITUDE": 25.669995, "LONGITUDE": -100.329985, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3712000, "POP_MIN": 1122874, "POP_OTHER": 3225636, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3995465, "MEGANAME": "Monterrey", "LS_NAME": "Monterrey", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 3296184, "MAX_POP20": 3296184, "MAX_POP50": 3296184, "MAX_POP300": 3296184, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 594, "MAX_AREAKM": 594, "MIN_AREAMI": 229, "MAX_AREAMI": 229, "MIN_PERKM": 208, "MAX_PERKM": 208, "MIN_PERMI": 130, "MAX_PERMI": 130, "MIN_BBXMIN": -100.5, "MAX_BBXMIN": -100.5, "MIN_BBXMAX": -100.125, "MAX_BBXMAX": -100.125, "MIN_BBYMIN": 25.575, "MAX_BBYMIN": 25.575, "MIN_BBYMAX": 25.85, "MAX_BBYMAX": 25.85, "MEAN_BBXC": -100.290632, "MEAN_BBYC": 25.71613, "COMPARE": 0, "GN_ASCII": "Monterrey", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 19, "GN_POP": 1122874, "ELEVATION": 0, "GTOPO30": 563, "TIMEZONE": "America/Monterrey", "GEONAMESNO": "Geonames ascii name + lat.d + long.d matching.", "UN_FID": 359, "UN_ADM0": "Mexico", "UN_LAT": 25.67, "UN_LONG": -100.31, "POP1950": 356, "POP1955": 498, "POP1960": 698, "POP1965": 943, "POP1970": 1267, "POP1975": 1589, "POP1980": 1992, "POP1985": 2273, "POP1990": 2594, "POP1995": 2961, "POP2000": 3266, "POP2005": 3579, "POP2010": 3712, "POP2015": 3901, "POP2020": 4140, "POP2025": 4298, "POP2050": 4413 }, "geometry": { "type": "Point", "coordinates": [ -100.283203, 25.641526 ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Guatemala", "NAMEALT": "Ciudad de Guatemala (Guatemala City)", "DIFFASCII": 0, "NAMEASCII": "Guatemala", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Guatemala", "SOV_A3": "GTM", "ADM0NAME": "Guatemala", "ADM0_A3": "GTM", "ADM1NAME": "Guatemala", "ISO_A2": "GT", "LATITUDE": 14.621135, "LONGITUDE": -90.526966, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1024000, "POP_MIN": 994938, "POP_OTHER": 2391150, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 3598132, "MEGANAME": "Ciudad de Guatemala (Guatemala City)", "LS_NAME": "Guatemala", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2420941, "MAX_POP20": 2417882, "MAX_POP50": 2419489, "MAX_POP300": 2419489, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 410, "MAX_AREAKM": 419, "MIN_AREAMI": 158, "MAX_AREAMI": 162, "MIN_PERKM": 274, "MAX_PERKM": 288, "MIN_PERMI": 170, "MAX_PERMI": 179, "MIN_BBXMIN": -90.658333, "MAX_BBXMIN": -90.658333, "MIN_BBXMAX": -90.425, "MAX_BBXMAX": -90.425, "MIN_BBYMIN": 14.433333, "MAX_BBYMIN": 14.441667, "MIN_BBYMAX": 14.783333, "MAX_BBYMAX": 14.783333, "MEAN_BBXC": -90.54419, "MEAN_BBYC": 14.603015, "COMPARE": 0, "GN_ASCII": "Guatemala City", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 994938, "ELEVATION": 0, "GTOPO30": 1533, "TIMEZONE": "America/Guatemala", "GEONAMESNO": "GeoNames match general.", "UN_FID": 206, "UN_ADM0": "Guatemala", "UN_LAT": 14.61, "UN_LONG": -90.52, "POP1950": 287, "POP1955": 370, "POP1960": 476, "POP1965": 592, "POP1970": 660, "POP1975": 715, "POP1980": 749, "POP1985": 776, "POP1990": 803, "POP1995": 839, "POP2000": 908, "POP2005": 984, "POP2010": 1024, "POP2015": 1104, "POP2020": 1281, "POP2025": 1481, "POP2050": 1690, "CITYALT": "Guatemala" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -90.527344, 14.604847 ], [ -79.365234, 43.707594 ], [ -82.353516, 23.079732 ], [ -76.992188, 38.891033 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Havana", "NAMEALT": "La Habana", "DIFFASCII": 0, "NAMEASCII": "Havana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Cuba", "SOV_A3": "CUB", "ADM0NAME": "Cuba", "ADM0_A3": "CUB", "ADM1NAME": "Ciudad de la Habana", "ISO_A2": "CU", "LATITUDE": 23.131959, "LONGITUDE": -82.364182, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2174000, "POP_MIN": 1990917, "POP_OTHER": 1930305, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3553478, "MEGANAME": "La Habana", "LS_NAME": "Havana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1990917, "MAX_POP20": 2051170, "MAX_POP50": 2051170, "MAX_POP300": 2051170, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 323, "MAX_AREAKM": 362, "MIN_AREAMI": 125, "MAX_AREAMI": 140, "MIN_PERKM": 240, "MAX_PERKM": 286, "MIN_PERMI": 149, "MAX_PERMI": 177, "MIN_BBXMIN": -82.533333, "MAX_BBXMIN": -82.533333, "MIN_BBXMAX": -82.208333, "MAX_BBXMAX": -82.208333, "MIN_BBYMIN": 22.916667, "MAX_BBYMIN": 22.975161, "MIN_BBYMAX": 23.183333, "MAX_BBYMAX": 23.183333, "MEAN_BBXC": -82.354344, "MEAN_BBYC": 23.076845, "COMPARE": 0, "GN_ASCII": "Havana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 2163824, "ELEVATION": 0, "GTOPO30": 5, "TIMEZONE": "America/Havana", "GEONAMESNO": "GeoNames match general.", "UN_FID": 172, "UN_ADM0": "Cuba", "UN_LAT": 23.04, "UN_LONG": -82.41, "POP1950": 1116, "POP1955": 1289, "POP1960": 1436, "POP1965": 1598, "POP1970": 1779, "POP1975": 1848, "POP1980": 1913, "POP1985": 2005, "POP1990": 2108, "POP1995": 2183, "POP2000": 2187, "POP2005": 2189, "POP2010": 2174, "POP2015": 2159, "POP2020": 2151, "POP2025": 2150, "POP2050": 2150, "CITYALT": "Havana" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -82.353516, 23.079732 ], [ -76.992188, 38.891033 ], [ -88.769531, 17.224758 ], [ -89.208984, 13.667338 ], [ -79.541016, 8.928487 ], [ -72.333984, 18.562947 ], [ -61.347656, 15.284185 ], [ -61.699219, 12.039321 ], [ -66.884766, 10.487812 ], [ -55.107422, 5.790897 ], [ -7.558594, 33.578015 ], [ -9.667969, 26.115986 ], [ -15.996094, 18.062312 ], [ -13.623047, 9.535749 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Belmopan", "DIFFASCII": 0, "NAMEASCII": "Belmopan", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Belize", "SOV_A3": "BLZ", "ADM0NAME": "Belize", "ADM0_A3": "BLZ", "ADM1NAME": "Cayo", "ISO_A2": "BZ", "LATITUDE": 17.252034, "LONGITUDE": -88.767073, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 15220, "POP_MIN": 13381, "POP_OTHER": 15220, "RANK_MAX": 6, "RANK_MIN": 6, "GEONAMEID": 3582672, "LS_NAME": "Belmopan", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 15220, "MAX_POP20": 15220, "MAX_POP50": 15220, "MAX_POP300": 15220, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 9, "MAX_AREAKM": 9, "MIN_AREAMI": 3, "MAX_AREAMI": 3, "MIN_PERKM": 16, "MAX_PERKM": 16, "MIN_PERMI": 10, "MAX_PERMI": 10, "MIN_BBXMIN": -88.783333, "MAX_BBXMIN": -88.783333, "MIN_BBXMAX": -88.75, "MAX_BBXMAX": -88.75, "MIN_BBYMIN": 17.233333, "MAX_BBYMIN": 17.233333, "MIN_BBYMAX": 17.266667, "MAX_BBYMAX": 17.266667, "MEAN_BBXC": -88.767803, "MEAN_BBYC": 17.248864, "COMPARE": 0, "GN_ASCII": "Belmopan", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 13381, "ELEVATION": 0, "GTOPO30": 63, "TIMEZONE": "America/Belize", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -88.769531, 17.224758 ], [ -89.208984, 13.667338 ], [ -79.541016, 8.928487 ], [ -72.333984, 18.562947 ], [ -61.347656, 15.284185 ], [ -61.699219, 12.039321 ], [ -66.884766, 10.487812 ], [ -55.107422, 5.790897 ], [ -7.558594, 33.578015 ], [ -9.667969, 26.115986 ], [ -15.996094, 18.062312 ], [ -13.623047, 9.535749 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Basseterre", "DIFFASCII": 0, "NAMEASCII": "Basseterre", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Saint Kitts and Nevis", "SOV_A3": "KNA", "ADM0NAME": "Saint Kitts and Nevis", "ADM0_A3": "KNA", "ISO_A2": "KN", "LATITUDE": 17.30203, "LONGITUDE": -62.717009, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 21887, "POP_MIN": 15500, "POP_OTHER": 21887, "RANK_MAX": 7, "RANK_MIN": 6, "GEONAMEID": 3575551, "LS_NAME": "Basseterre", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 21887, "MAX_POP20": 21887, "MAX_POP50": 21887, "MAX_POP300": 21887, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 7, "MAX_AREAKM": 7, "MIN_AREAMI": 3, "MAX_AREAMI": 3, "MIN_PERKM": 16, "MAX_PERKM": 16, "MIN_PERMI": 10, "MAX_PERMI": 10, "MIN_BBXMIN": -62.741667, "MAX_BBXMIN": -62.741667, "MIN_BBXMAX": -62.708333, "MAX_BBXMAX": -62.708333, "MIN_BBYMIN": 17.291667, "MAX_BBYMIN": 17.291667, "MIN_BBYMAX": 17.333333, "MAX_BBYMAX": 17.333333, "MEAN_BBXC": -62.726389, "MEAN_BBYC": 17.306019, "COMPARE": 0, "GN_ASCII": "Basseterre", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 3, "GN_POP": 12920, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "America/St_Kitts", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -62.666016, 17.308688 ] } }
,
@@ -29,30 +29,24 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital alt", "NAME": "Laayoune", "DIFFASCII": 0, "NAMEASCII": "Laayoune", "ADM0CAP": 0, "CAPALT": 1, "CAPIN": "Claimed as capi", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Morocco", "SOV_A3": "MAR", "ADM0NAME": "Morocco", "ADM0_A3": "MAR", "ADM1NAME": "Laâyoune - Boujdour - Sakia El Hamra", "ISO_A2": "MA", "LATITUDE": 27.149982, "LONGITUDE": -13.200006, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 188084, "POP_MIN": 176365, "POP_OTHER": 176365, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 2462881, "LS_NAME": "Laayoune", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 176365, "MAX_POP20": 176365, "MAX_POP50": 176365, "MAX_POP300": 0, "MAX_POP310": 0, "MAX_NATSCA": 50, "MIN_AREAKM": 21, "MAX_AREAKM": 21, "MIN_AREAMI": 8, "MAX_AREAMI": 8, "MIN_PERKM": 26, "MAX_PERKM": 26, "MIN_PERMI": 16, "MAX_PERMI": 16, "MIN_BBXMIN": -13.225, "MAX_BBXMIN": -13.225, "MIN_BBXMAX": -13.158333, "MAX_BBXMAX": -13.158333, "MIN_BBYMIN": 27.125, "MAX_BBYMIN": 27.125, "MIN_BBYMAX": 27.175, "MAX_BBYMAX": 27.175, "MEAN_BBXC": -13.194643, "MEAN_BBYC": 27.146131, "COMPARE": 0, "GN_ASCII": "Ejbei Uad el Aabd", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 0, "GN_POP": 188084, "ELEVATION": 0, "GTOPO30": 72, "TIMEZONE": "Africa/El_Aaiun", "GEONAMESNO": "GeoNames rough area, rough name.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.183594, 27.137368 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Bamako", "DIFFASCII": 0, "NAMEASCII": "Bamako", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Mali", "SOV_A3": "MLI", "ADM0NAME": "Mali", "ADM0_A3": "MLI", "ADM1NAME": "Bamako", "ISO_A2": "ML", "LATITUDE": 12.650015, "LONGITUDE": -8.000039, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1494000, "POP_MIN": 1297281, "POP_OTHER": 1301407, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2460596, "MEGANAME": "Bamako", "LS_NAME": "Bamako", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1316564, "MAX_POP20": 1316564, "MAX_POP50": 1316564, "MAX_POP300": 1316564, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 172, "MAX_AREAKM": 172, "MIN_AREAMI": 66, "MAX_AREAMI": 66, "MIN_PERKM": 106, "MAX_PERKM": 106, "MIN_PERMI": 66, "MAX_PERMI": 66, "MIN_BBXMIN": -8.058333, "MAX_BBXMIN": -8.058333, "MIN_BBXMAX": -7.908333, "MAX_BBXMAX": -7.908333, "MIN_BBYMIN": 12.541667, "MAX_BBYMIN": 12.541667, "MIN_BBYMAX": 12.716667, "MAX_BBYMAX": 12.716667, "MEAN_BBXC": -7.987419, "MEAN_BBYC": 12.626173, "COMPARE": 0, "GN_ASCII": "Bamako", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 1297281, "ELEVATION": 0, "GTOPO30": 350, "TIMEZONE": "Africa/Bamako", "GEONAMESNO": "GeoNames match general.", "UN_FID": 349, "UN_ADM0": "Mali", "UN_LAT": 12.65, "UN_LONG": -7.98, "POP1950": 89, "POP1955": 111, "POP1960": 130, "POP1965": 158, "POP1970": 222, "POP1975": 363, "POP1980": 489, "POP1985": 608, "POP1990": 746, "POP1995": 910, "POP2000": 1110, "POP2005": 1368, "POP2010": 1494, "POP2015": 1708, "POP2020": 2130, "POP2025": 2633, "POP2050": 3214 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -7.998047, 12.640338 ], [ -5.273438, 6.839170 ], [ -0.175781, 5.528511 ], [ -68.115234, -16.551962 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Bamako", "DIFFASCII": 0, "NAMEASCII": "Bamako", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Mali", "SOV_A3": "MLI", "ADM0NAME": "Mali", "ADM0_A3": "MLI", "ADM1NAME": "Bamako", "ISO_A2": "ML", "LATITUDE": 12.650015, "LONGITUDE": -8.000039, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1494000, "POP_MIN": 1297281, "POP_OTHER": 1301407, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 2460596, "MEGANAME": "Bamako", "LS_NAME": "Bamako", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1316564, "MAX_POP20": 1316564, "MAX_POP50": 1316564, "MAX_POP300": 1316564, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 172, "MAX_AREAKM": 172, "MIN_AREAMI": 66, "MAX_AREAMI": 66, "MIN_PERKM": 106, "MAX_PERKM": 106, "MIN_PERMI": 66, "MAX_PERMI": 66, "MIN_BBXMIN": -8.058333, "MAX_BBXMIN": -8.058333, "MIN_BBXMAX": -7.908333, "MAX_BBXMAX": -7.908333, "MIN_BBYMIN": 12.541667, "MAX_BBYMIN": 12.541667, "MIN_BBYMAX": 12.716667, "MAX_BBYMAX": 12.716667, "MEAN_BBXC": -7.987419, "MEAN_BBYC": 12.626173, "COMPARE": 0, "GN_ASCII": "Bamako", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 1297281, "ELEVATION": 0, "GTOPO30": 350, "TIMEZONE": "Africa/Bamako", "GEONAMESNO": "GeoNames match general.", "UN_FID": 349, "UN_ADM0": "Mali", "UN_LAT": 12.65, "UN_LONG": -7.98, "POP1950": 89, "POP1955": 111, "POP1960": 130, "POP1965": 158, "POP1970": 222, "POP1975": 363, "POP1980": 489, "POP1985": 608, "POP1990": 746, "POP1995": 910, "POP2000": 1110, "POP2005": 1368, "POP2010": 1494, "POP2015": 1708, "POP2020": 2130, "POP2025": 2633, "POP2050": 3214 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -7.998047, 12.640338 ], [ -5.273438, 6.839170 ], [ -0.175781, 5.528511 ], [ -68.115234, -16.551962 ], [ -65.214844, -19.062118 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Quito", "DIFFASCII": 0, "NAMEASCII": "Quito", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Ecuador", "SOV_A3": "ECU", "ADM0NAME": "Ecuador", "ADM0_A3": "ECU", "ADM1NAME": "Pichincha", "ISO_A2": "EC", "LATITUDE": -0.214988, "LONGITUDE": -78.500051, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1701000, "POP_MIN": 1399814, "POP_OTHER": 1435528, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3652462, "MEGANAME": "Quito", "LS_NAME": "Quito", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1472051, "MAX_POP20": 1892286, "MAX_POP50": 1892286, "MAX_POP300": 1892286, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 334, "MAX_AREAKM": 496, "MIN_AREAMI": 129, "MAX_AREAMI": 191, "MIN_PERKM": 233, "MAX_PERKM": 359, "MIN_PERMI": 145, "MAX_PERMI": 223, "MIN_BBXMIN": -78.591667, "MAX_BBXMIN": -78.591667, "MIN_BBXMAX": -78.291667, "MAX_BBXMAX": -78.291667, "MIN_BBYMIN": -0.391667, "MAX_BBYMIN": -0.30257, "MIN_BBYMAX": 0.025, "MAX_BBYMAX": 0.025, "MEAN_BBXC": -78.460061, "MEAN_BBYC": -0.198438, "COMPARE": 0, "GN_ASCII": "Quito", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 18, "GN_POP": 1399814, "ELEVATION": 0, "GTOPO30": 2764, "TIMEZONE": "America/Guayaquil", "GEONAMESNO": "GeoNames match general.", "UN_FID": 178, "UN_ADM0": "Ecuador", "UN_LAT": -0.22, "UN_LONG": -78.52, "POP1950": 206, "POP1955": 257, "POP1960": 319, "POP1965": 399, "POP1970": 501, "POP1975": 628, "POP1980": 780, "POP1985": 936, "POP1990": 1088, "POP1995": 1217, "POP2000": 1357, "POP2005": 1593, "POP2010": 1701, "POP2015": 1846, "POP2020": 2035, "POP2025": 2189, "POP2050": 2316 }, "geometry": { "type": "Point", "coordinates": [ -78.486328, -0.263671 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Sucre", "DIFFASCII": 0, "NAMEASCII": "Sucre", "ADM0CAP": 1, "CAPALT": 0, "CAPIN": "Official (const", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Bolivia", "SOV_A3": "BOL", "ADM0NAME": "Bolivia", "ADM0_A3": "BOL", "ADM1NAME": "Chuquisaca", "ISO_A2": "BO", "LATITUDE": -19.040971, "LONGITUDE": -65.259516, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 224838, "POP_MIN": 221736, "POP_OTHER": 221736, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 3903987, "LS_NAME": "Sucre", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 221736, "MAX_POP20": 221736, "MAX_POP50": 221736, "MAX_POP300": 221736, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 34, "MAX_AREAKM": 34, "MIN_AREAMI": 13, "MAX_AREAMI": 13, "MIN_PERKM": 32, "MAX_PERKM": 32, "MIN_PERMI": 20, "MAX_PERMI": 20, "MIN_BBXMIN": -65.3, "MAX_BBXMIN": -65.3, "MIN_BBXMAX": -65.225, "MAX_BBXMAX": -65.225, "MIN_BBYMIN": -19.066667, "MAX_BBYMIN": -19.066667, "MIN_BBYMAX": -18.991667, "MAX_BBYMAX": -18.991667, "MEAN_BBXC": -65.260317, "MEAN_BBYC": -19.030556, "COMPARE": 0, "GN_ASCII": "Sucre", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 1, "GN_POP": 224838, "ELEVATION": 0, "GTOPO30": 2759, "TIMEZONE": "America/La_Paz", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -65.214844, -19.062118 ], [ -57.656250, -25.324167 ], [ -56.162109, -34.885931 ], [ 4.921875, 52.321911 ], [ 6.152344, 49.610710 ], [ 6.152344, 46.195042 ], [ 9.580078, 47.100045 ], [ 13.447266, 52.536273 ], [ 21.005859, 52.214339 ], [ 15.996094, 45.767523 ], [ 12.480469, 41.902277 ], [ 19.072266, 47.457809 ], [ 19.248047, 42.423457 ], [ 21.181641, 42.682435 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Asuncion", "NAMEALT": "Asunción", "DIFFASCII": 0, "NAMEASCII": "Asuncion", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Paraguay", "SOV_A3": "PRY", "ADM0NAME": "Paraguay", "ADM0_A3": "PRY", "ADM1NAME": "Asunción", "ISO_A2": "PY", "LATITUDE": -25.296403, "LONGITUDE": -57.641505, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 1870000, "POP_MIN": 11693, "POP_OTHER": 636771, "RANK_MAX": 12, "RANK_MIN": 6, "GEONAMEID": 1730025, "MEGANAME": "Asunción", "LS_NAME": "Asuncion", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 745924, "MAX_POP20": 1829910, "MAX_POP50": 2141255, "MAX_POP300": 2141255, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 105, "MAX_AREAKM": 651, "MIN_AREAMI": 41, "MAX_AREAMI": 251, "MIN_PERKM": 63, "MAX_PERKM": 331, "MIN_PERMI": 39, "MAX_PERMI": 206, "MIN_BBXMIN": -57.675, "MAX_BBXMIN": -57.675, "MIN_BBXMAX": -57.543999, "MAX_BBXMAX": -57.316667, "MIN_BBYMIN": -25.491667, "MAX_BBYMIN": -25.391667, "MIN_BBYMAX": -25.208333, "MAX_BBYMAX": -25.1, "MEAN_BBXC": -57.535385, "MEAN_BBYC": -25.307462, "COMPARE": 0, "GN_ASCII": "Asuncion", "FEATURE_CL": "P", "FEATURE_CO": "PPL", "ADMIN1_COD": 24, "GN_POP": 11693, "ELEVATION": 0, "GTOPO30": 24, "TIMEZONE": "Asia/Manila", "GEONAMESNO": "GeoNames match general.", "UN_FID": 409, "UN_ADM0": "Paraguay", "UN_LAT": -25.3, "UN_LONG": -57.62, "POP1950": 258, "POP1955": 314, "POP1960": 382, "POP1965": 461, "POP1970": 552, "POP1975": 654, "POP1980": 770, "POP1985": 914, "POP1990": 1091, "POP1995": 1287, "POP2000": 1507, "POP2005": 1762, "POP2010": 1870, "POP2015": 2030, "POP2020": 2277, "POP2025": 2506, "POP2050": 2715, "CITYALT": "Asuncion" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ -57.656250, -25.324167 ], [ -56.162109, -34.885931 ], [ 4.921875, 52.321911 ], [ 6.152344, 49.610710 ], [ 6.152344, 46.195042 ], [ 9.580078, 47.100045 ], [ 13.447266, 52.536273 ], [ 21.005859, 52.214339 ], [ 15.996094, 45.767523 ], [ 12.480469, 41.902277 ], [ 19.072266, 47.457809 ], [ 19.248047, 42.423457 ], [ 21.181641, 42.682435 ], [ 24.960938, 60.152442 ], [ 30.498047, 50.401515 ], [ 28.916016, 46.980252 ], [ 37.617188, 55.727110 ], [ 10.195312, 36.809285 ], [ 14.501953, 35.889050 ], [ 2.548828, 6.402648 ], [ 3.427734, 6.402648 ], [ 8.789062, 3.688855 ], [ 15.029297, 12.125264 ], [ 23.730469, 37.996163 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Oslo", "DIFFASCII": 0, "NAMEASCII": "Oslo", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Kingdom of Norway", "SOV_A3": "NOR", "ADM0NAME": "Norway", "ADM0_A3": "NOR", "ADM1NAME": "Oslo", "ISO_A2": "NO", "LATITUDE": 59.91669, "LONGITUDE": 10.749979, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 835000, "POP_MIN": 580000, "POP_OTHER": 701804, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 3143244, "MEGANAME": "Oslo", "LS_NAME": "Oslo", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 731563, "MAX_POP20": 731563, "MAX_POP50": 762374, "MAX_POP300": 762374, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 329, "MAX_AREAKM": 362, "MIN_AREAMI": 127, "MAX_AREAMI": 140, "MIN_PERKM": 340, "MAX_PERKM": 390, "MIN_PERMI": 211, "MAX_PERMI": 243, "MIN_BBXMIN": 10.333333, "MAX_BBXMIN": 10.440355, "MIN_BBXMAX": 11.091667, "MAX_BBXMAX": 11.091667, "MIN_BBYMIN": 59.708333, "MAX_BBYMIN": 59.708333, "MIN_BBYMAX": 60.066667, "MAX_BBYMAX": 60.066667, "MEAN_BBXC": 10.756508, "MEAN_BBYC": 59.906118, "COMPARE": 0, "GN_ASCII": "Oslo", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 12, "GN_POP": 580000, "ELEVATION": 0, "GTOPO30": 11, "TIMEZONE": "Europe/Oslo", "GEONAMESNO": "GeoNames match general.", "UN_FID": 397, "UN_ADM0": "Norway", "UN_LAT": 59.93, "UN_LONG": 10.71, "POP1950": 468, "POP1955": 533, "POP1960": 578, "POP1965": 610, "POP1970": 643, "POP1975": 644, "POP1980": 643, "POP1985": 662, "POP1990": 684, "POP1995": 729, "POP2000": 774, "POP2005": 816, "POP2010": 835, "POP2015": 858, "POP2020": 885, "POP2025": 909, "POP2050": 936 }, "geometry": { "type": "Point", "coordinates": [ 10.810547, 59.888937 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 7, "FEATURECLA": "Admin-0 capital", "NAME": "Helsinki", "DIFFASCII": 0, "NAMEASCII": "Helsinki", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Finland", "SOV_A3": "FIN", "ADM0NAME": "Finland", "ADM0_A3": "FIN", "ADM1NAME": "Southern Finland", "ISO_A2": "FI", "LATITUDE": 60.175563, "LONGITUDE": 24.934126, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 1115000, "POP_MIN": 558457, "POP_OTHER": 762958, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 658225, "MEGANAME": "Helsinki", "LS_NAME": "Helsinki", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 852233, "MAX_POP20": 852233, "MAX_POP50": 852233, "MAX_POP300": 852233, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 513, "MAX_AREAKM": 513, "MIN_AREAMI": 198, "MAX_AREAMI": 198, "MIN_PERKM": 550, "MAX_PERKM": 550, "MIN_PERMI": 342, "MAX_PERMI": 342, "MIN_BBXMIN": 24.558333, "MAX_BBXMIN": 24.558333, "MIN_BBXMAX": 25.191667, "MAX_BBXMAX": 25.191667, "MIN_BBYMIN": 60.116667, "MAX_BBYMIN": 60.116667, "MIN_BBYMAX": 60.433333, "MAX_BBYMAX": 60.433333, "MEAN_BBXC": 24.910042, "MEAN_BBYC": 60.254779, "COMPARE": 0, "GN_ASCII": "Helsinki", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 13, "GN_POP": 558457, "ELEVATION": 0, "GTOPO30": 23, "TIMEZONE": "Europe/Helsinki", "GEONAMESNO": "GeoNames match general.", "UN_FID": 183, "UN_ADM0": "Finland", "UN_LAT": 60.19, "UN_LONG": 24.97, "POP1950": 366, "POP1955": 405, "POP1960": 448, "POP1965": 478, "POP1970": 507, "POP1975": 582, "POP1980": 674, "POP1985": 724, "POP1990": 872, "POP1995": 943, "POP2000": 1019, "POP2005": 1094, "POP2010": 1115, "POP2015": 1139, "POP2020": 1169, "POP2025": 1195, "POP2050": 1220 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 24.960938, 60.152442 ], [ 30.498047, 50.401515 ], [ 28.916016, 46.980252 ], [ 37.617188, 55.727110 ], [ 10.195312, 36.809285 ], [ 14.501953, 35.889050 ], [ 2.548828, 6.402648 ], [ 3.427734, 6.402648 ], [ 8.789062, 3.688855 ], [ 15.029297, 12.125264 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Vilnius", "DIFFASCII": 0, "NAMEASCII": "Vilnius", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Lithuania", "SOV_A3": "LTU", "ADM0NAME": "Lithuania", "ADM0_A3": "LTU", "ADM1NAME": "Vilniaus", "ISO_A2": "LT", "LATITUDE": 54.683366, "LONGITUDE": 25.316635, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 542366, "POP_MIN": 507029, "POP_OTHER": 494356, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 593116, "LS_NAME": "Vilnius", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 507029, "MAX_POP20": 507029, "MAX_POP50": 507029, "MAX_POP300": 507029, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 126, "MAX_AREAKM": 126, "MIN_AREAMI": 49, "MAX_AREAMI": 49, "MIN_PERKM": 162, "MAX_PERKM": 162, "MIN_PERMI": 101, "MAX_PERMI": 101, "MIN_BBXMIN": 25.166667, "MAX_BBXMIN": 25.166667, "MIN_BBXMAX": 25.391667, "MAX_BBXMAX": 25.391667, "MIN_BBYMIN": 54.575, "MAX_BBYMIN": 54.575, "MIN_BBYMAX": 54.775, "MAX_BBYMAX": 54.775, "MEAN_BBXC": 25.259623, "MEAN_BBYC": 54.692063, "COMPARE": 0, "GN_ASCII": "Vilnius", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 65, "GN_POP": 542366, "ELEVATION": 0, "GTOPO30": 125, "TIMEZONE": "Europe/Vilnius", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 25.312500, 54.673831 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Athens", "NAMEPAR": "Athínai", "NAMEALT": "Athinai", "DIFFASCII": 0, "NAMEASCII": "Athens", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Greece", "SOV_A3": "GRC", "ADM0NAME": "Greece", "ADM0_A3": "GRC", "ADM1NAME": "Attiki", "ISO_A2": "GR", "LATITUDE": 37.983326, "LONGITUDE": 23.733321, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3242000, "POP_MIN": 729137, "POP_OTHER": 112572, "RANK_MAX": 12, "RANK_MIN": 11, "GEONAMEID": 264371, "MEGANAME": "Athínai", "LS_NAME": "Athens2", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2352834, "MAX_POP20": 3010089, "MAX_POP50": 3010089, "MAX_POP300": 3010089, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 340, "MAX_AREAKM": 509, "MIN_AREAMI": 131, "MAX_AREAMI": 196, "MIN_PERKM": 199, "MAX_PERKM": 296, "MIN_PERMI": 124, "MAX_PERMI": 184, "MIN_BBXMIN": 23.483333, "MAX_BBXMIN": 23.591667, "MIN_BBXMAX": 23.916667, "MAX_BBXMAX": 23.916667, "MIN_BBYMIN": 37.9, "MAX_BBYMIN": 37.908333, "MIN_BBYMAX": 38.158333, "MAX_BBYMAX": 38.158333, "MEAN_BBXC": 23.741514, "MEAN_BBYC": 38.032045, "COMPARE": 0, "GN_ASCII": "Athens", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 729137, "ELEVATION": 70, "GTOPO30": 110, "TIMEZONE": "Europe/Athens", "GEONAMESNO": "GeoNames match general.", "UN_FID": 198, "UN_ADM0": "Greece", "UN_LAT": 37.94, "UN_LONG": 23.65, "POP1950": 1347, "POP1955": 1563, "POP1960": 1814, "POP1965": 2121, "POP1970": 2485, "POP1975": 2738, "POP1980": 2987, "POP1985": 3047, "POP1990": 3070, "POP1995": 3122, "POP2000": 3179, "POP2005": 3230, "POP2010": 3242, "POP2015": 3256, "POP2020": 3278, "POP2025": 3300, "POP2050": 3326, "CITYALT": "Athens" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 23.730469, 37.996163 ], [ 33.398438, 35.173808 ], [ 35.507812, 33.870416 ], [ 44.560547, 40.178873 ], [ 35.947266, 31.952162 ], [ 31.640625, 4.828260 ], [ 44.208984, 15.368950 ], [ 38.759766, 9.015302 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Nicosia", "DIFFASCII": 0, "NAMEASCII": "Nicosia", "ADM0CAP": 1, "CAPALT": 0, "CAPIN": "Capital of both", "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Cyprus", "SOV_A3": "CYP", "ADM0NAME": "Cyprus", "ADM0_A3": "CYP", "ISO_A2": "CY", "LATITUDE": 35.166676, "LONGITUDE": 33.366635, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 224300, "POP_MIN": 200452, "POP_OTHER": 222985, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 146268, "LS_NAME": "Nicosia", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 224300, "MAX_POP20": 224300, "MAX_POP50": 224300, "MAX_POP300": 224300, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 128, "MAX_AREAKM": 128, "MIN_AREAMI": 49, "MAX_AREAMI": 49, "MIN_PERKM": 109, "MAX_PERKM": 109, "MIN_PERMI": 68, "MAX_PERMI": 68, "MIN_BBXMIN": 33.275, "MAX_BBXMIN": 33.275, "MIN_BBXMAX": 33.425, "MAX_BBXMAX": 33.425, "MIN_BBYMIN": 35.041667, "MAX_BBYMIN": 35.041667, "MIN_BBYMAX": 35.225, "MAX_BBYMAX": 35.225, "MEAN_BBXC": 33.352244, "MEAN_BBYC": 35.15, "COMPARE": 0, "GN_ASCII": "Nicosia", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 4, "GN_POP": 200452, "ELEVATION": 0, "GTOPO30": 128, "TIMEZONE": "Asia/Nicosia", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 33.398438, 35.173808 ], [ 35.507812, 33.870416 ], [ 44.560547, 40.178873 ], [ 35.947266, 31.952162 ], [ 31.640625, 4.828260 ], [ 44.208984, 15.368950 ], [ 38.759766, 9.015302 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Tashkent", "DIFFASCII": 0, "NAMEASCII": "Tashkent", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Uzbekistan", "SOV_A3": "UZB", "ADM0NAME": "Uzbekistan", "ADM0_A3": "UZB", "ADM1NAME": "Tashkent", "ISO_A2": "UZ", "LATITUDE": 41.311702, "LONGITUDE": 69.294933, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2184000, "POP_MIN": 1978028, "POP_OTHER": 2806287, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1512569, "MEGANAME": "Tashkent", "LS_NAME": "Tashkent", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2865234, "MAX_POP20": 2865890, "MAX_POP50": 2865890, "MAX_POP300": 2865890, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 639, "MAX_AREAKM": 643, "MIN_AREAMI": 247, "MAX_AREAMI": 248, "MIN_PERKM": 377, "MAX_PERKM": 383, "MIN_PERMI": 234, "MAX_PERMI": 238, "MIN_BBXMIN": 69.05, "MAX_BBXMIN": 69.05, "MIN_BBXMAX": 69.436467, "MAX_BBXMAX": 69.45, "MIN_BBYMIN": 41.141667, "MAX_BBYMIN": 41.141667, "MIN_BBYMAX": 41.483333, "MAX_BBYMAX": 41.483333, "MEAN_BBXC": 69.256717, "MEAN_BBYC": 41.318916, "COMPARE": 0, "GN_ASCII": "Tashkent", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 13, "GN_POP": 1978028, "ELEVATION": 0, "GTOPO30": 460, "TIMEZONE": "Asia/Tashkent", "GEONAMESNO": "GeoNames match general.", "UN_FID": 580, "UN_ADM0": "Uzbekistan", "UN_LAT": 41.24, "UN_LONG": 69.34, "POP1950": 755, "POP1955": 843, "POP1960": 964, "POP1965": 1165, "POP1970": 1403, "POP1975": 1612, "POP1980": 1818, "POP1985": 1958, "POP1990": 2100, "POP1995": 2116, "POP2000": 2135, "POP2005": 2158, "POP2010": 2184, "POP2015": 2247, "POP2020": 2416, "POP2025": 2636, "POP2050": 2892 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 69.345703, 41.310824 ], [ 87.626953, 43.771094 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Tashkent", "DIFFASCII": 0, "NAMEASCII": "Tashkent", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Uzbekistan", "SOV_A3": "UZB", "ADM0NAME": "Uzbekistan", "ADM0_A3": "UZB", "ADM1NAME": "Tashkent", "ISO_A2": "UZ", "LATITUDE": 41.311702, "LONGITUDE": 69.294933, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2184000, "POP_MIN": 1978028, "POP_OTHER": 2806287, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1512569, "MEGANAME": "Tashkent", "LS_NAME": "Tashkent", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2865234, "MAX_POP20": 2865890, "MAX_POP50": 2865890, "MAX_POP300": 2865890, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 639, "MAX_AREAKM": 643, "MIN_AREAMI": 247, "MAX_AREAMI": 248, "MIN_PERKM": 377, "MAX_PERKM": 383, "MIN_PERMI": 234, "MAX_PERMI": 238, "MIN_BBXMIN": 69.05, "MAX_BBXMIN": 69.05, "MIN_BBXMAX": 69.436467, "MAX_BBXMAX": 69.45, "MIN_BBYMIN": 41.141667, "MAX_BBYMIN": 41.141667, "MIN_BBYMAX": 41.483333, "MAX_BBYMAX": 41.483333, "MEAN_BBXC": 69.256717, "MEAN_BBYC": 41.318916, "COMPARE": 0, "GN_ASCII": "Tashkent", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 13, "GN_POP": 1978028, "ELEVATION": 0, "GTOPO30": 460, "TIMEZONE": "Asia/Tashkent", "GEONAMESNO": "GeoNames match general.", "UN_FID": 580, "UN_ADM0": "Uzbekistan", "UN_LAT": 41.24, "UN_LONG": 69.34, "POP1950": 755, "POP1955": 843, "POP1960": 964, "POP1965": 1165, "POP1970": 1403, "POP1975": 1612, "POP1980": 1818, "POP1985": 1958, "POP1990": 2100, "POP1995": 2116, "POP2000": 2135, "POP2005": 2158, "POP2010": 2184, "POP2015": 2247, "POP2020": 2416, "POP2025": 2636, "POP2050": 2892 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 69.345703, 41.310824 ], [ 87.626953, 43.771094 ], [ 47.988281, 29.382175 ], [ 50.625000, 26.194877 ], [ 54.404297, 24.447150 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Kuwait", "NAMEALT": "Al Kuwayt|Kuwait City", "DIFFASCII": 0, "NAMEASCII": "Kuwait", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Kuwait", "SOV_A3": "KWT", "ADM0NAME": "Kuwait", "ADM0_A3": "KWT", "ADM1NAME": "Al Kuwayt", "ISO_A2": "KW", "LATITUDE": 29.369718, "LONGITUDE": 47.978301, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2063000, "POP_MIN": 60064, "POP_OTHER": 1682968, "RANK_MAX": 12, "RANK_MIN": 8, "GEONAMEID": 285787, "MEGANAME": "Al Kuwayt (Kuwait City)", "LS_NAME": "Kuwait", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 1732952, "MAX_POP20": 2142805, "MAX_POP50": 2142805, "MAX_POP300": 2142805, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 264, "MAX_AREAKM": 366, "MIN_AREAMI": 102, "MAX_AREAMI": 141, "MIN_PERKM": 162, "MAX_PERKM": 249, "MIN_PERMI": 101, "MAX_PERMI": 155, "MIN_BBXMIN": 47.8, "MAX_BBXMIN": 47.821052, "MIN_BBXMAX": 48.1, "MAX_BBXMAX": 48.15, "MIN_BBYMIN": 29.066667, "MAX_BBYMIN": 29.225, "MIN_BBYMAX": 29.391667, "MAX_BBYMAX": 29.391667, "MEAN_BBXC": 47.993999, "MEAN_BBYC": 29.277119, "COMPARE": 0, "GN_ASCII": "Kuwait", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 60064, "ELEVATION": 0, "GTOPO30": 12, "TIMEZONE": "Asia/Kuwait", "GEONAMESNO": "GeoNames match general.", "UN_FID": 339, "UN_ADM0": "Kuwait", "UN_LAT": 29.38, "UN_LONG": 47.97, "POP1950": 63, "POP1955": 106, "POP1960": 179, "POP1965": 303, "POP1970": 553, "POP1975": 688, "POP1980": 891, "POP1985": 1122, "POP1990": 1392, "POP1995": 1190, "POP2000": 1499, "POP2005": 1888, "POP2010": 2063, "POP2015": 2305, "POP2020": 2592, "POP2025": 2790, "POP2050": 2956, "CITYALT": "Kuwait" }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 47.988281, 29.382175 ], [ 50.625000, 26.194877 ], [ 54.404297, 24.447150 ], [ 58.623047, 23.563987 ], [ 69.169922, 34.524661 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-0 capital", "NAME": "New Delhi", "DIFFASCII": 0, "NAMEASCII": "New Delhi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 0, "SOV0NAME": "India", "SOV_A3": "IND", "ADM0NAME": "India", "ADM0_A3": "IND", "ADM1NAME": "Delhi", "ISO_A2": "IN", "LATITUDE": 28.600023, "LONGITUDE": 77.19998, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 317797, "POP_MIN": 317797, "POP_OTHER": 8060107, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 1261481, "LS_NAME": "New Delhi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 8761047, "MAX_POP20": 13414375, "MAX_POP50": 32426336, "MAX_POP300": 32424761, "MAX_POP310": 224908923, "MAX_NATSCA": 300, "MIN_AREAKM": 864, "MAX_AREAKM": 186559, "MIN_AREAMI": 334, "MAX_AREAMI": 72030, "MIN_PERKM": 244, "MAX_PERKM": 130296, "MIN_PERMI": 152, "MAX_PERMI": 80962, "MIN_BBXMIN": 71.033333, "MAX_BBXMIN": 76.943289, "MIN_BBXMAX": 77.43183, "MAX_BBXMAX": 82.566667, "MIN_BBYMIN": 24, "MAX_BBYMIN": 28.152007, "MIN_BBYMAX": 28.738629, "MAX_BBYMAX": 33.466667, "MEAN_BBXC": 77.27294500000001, "MEAN_BBYC": 28.382537, "COMPARE": 0, "GN_ASCII": "New Delhi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 7, "GN_POP": 317797, "ELEVATION": 0, "GTOPO30": 205, "TIMEZONE": "Asia/Kolkata", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 77.255859, 28.613459 ], [ 88.330078, 22.512557 ], [ 77.607422, 12.983148 ], [ 79.980469, 6.839170 ], [ 96.152344, 16.804541 ], [ 102.656250, 17.978733 ], [ 101.689453, 3.162456 ], [ 103.886719, 1.230374 ], [ 121.464844, 31.203405 ] ] } }
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Muscat", "DIFFASCII": 0, "NAMEASCII": "Muscat", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Oman", "SOV_A3": "OMN", "ADM0NAME": "Oman", "ADM0_A3": "OMN", "ADM1NAME": "Muscat", "ISO_A2": "OM", "LATITUDE": 23.613325, "LONGITUDE": 58.593312, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 734697, "POP_MIN": 586861, "POP_OTHER": 586861, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 287286, "LS_NAME": "Muscat", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 586861, "MAX_POP20": 586861, "MAX_POP50": 586861, "MAX_POP300": 586861, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 104, "MAX_AREAKM": 104, "MIN_AREAMI": 40, "MAX_AREAMI": 40, "MIN_PERKM": 121, "MAX_PERKM": 121, "MIN_PERMI": 75, "MAX_PERMI": 75, "MIN_BBXMIN": 58.333333, "MAX_BBXMIN": 58.333333, "MIN_BBXMAX": 58.6, "MAX_BBXMAX": 58.6, "MIN_BBYMIN": 23.558333, "MAX_BBYMIN": 23.558333, "MIN_BBYMAX": 23.641667, "MAX_BBYMAX": 23.641667, "MEAN_BBXC": 58.474684, "MEAN_BBYC": 23.599306, "COMPARE": 0, "GN_ASCII": "Muscat", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 6, "GN_POP": 797000, "ELEVATION": 0, "GTOPO30": 69, "TIMEZONE": "Asia/Muscat", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 58.623047, 23.563987 ], [ 69.169922, 34.524661 ], [ 77.255859, 28.613459 ], [ 88.330078, 22.512557 ], [ 77.607422, 12.983148 ], [ 79.980469, 6.839170 ], [ 96.152344, 16.804541 ], [ 102.656250, 17.978733 ], [ 101.689453, 3.162456 ], [ 103.886719, 1.230374 ], [ 121.464844, 31.203405 ], [ 125.771484, 39.027719 ], [ 121.025391, 14.604847 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Dhaka", "DIFFASCII": 0, "NAMEASCII": "Dhaka", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Bangladesh", "SOV_A3": "BGD", "ADM0NAME": "Bangladesh", "ADM0_A3": "BGD", "ADM1NAME": "Dhaka", "ISO_A2": "BD", "LATITUDE": 23.72306, "LONGITUDE": 90.408579, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 12797394, "POP_MIN": 7000940, "POP_OTHER": 14995538, "RANK_MAX": 14, "RANK_MIN": 13, "GEONAMEID": 1185241, "MEGANAME": "Dhaka", "LS_NAME": "Dhaka", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 14548962, "MAX_POP20": 21394172, "MAX_POP50": 53845691, "MAX_POP300": 78549234, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3528, "MAX_AREAKM": 49912, "MIN_AREAMI": 1362, "MAX_AREAMI": 19271, "MIN_PERKM": 1439, "MAX_PERKM": 19314, "MIN_PERMI": 894, "MAX_PERMI": 12001, "MIN_BBXMIN": 88.133791, "MAX_BBXMIN": 89.9, "MIN_BBXMAX": 90.816777, "MAX_BBXMAX": 92.908333, "MIN_BBYMIN": 22.858333, "MAX_BBYMIN": 23.482936, "MIN_BBYMAX": 24.247407, "MAX_BBYMAX": 25.583333, "MEAN_BBXC": 90.400679, "MEAN_BBYC": 24.105092, "COMPARE": 0, "GN_ASCII": "Dhaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 81, "GN_POP": 10356500, "ELEVATION": 0, "GTOPO30": 4, "TIMEZONE": "Asia/Dhaka", "GEONAMESNO": "GeoNames match general.", "UN_FID": 369, "UN_ADM0": "Bangladesh", "UN_LAT": 23.7, "UN_LONG": 90.4, "POP1950": 336, "POP1955": 409, "POP1960": 508, "POP1965": 821, "POP1970": 1374, "POP1975": 2221, "POP1980": 3266, "POP1985": 4660, "POP1990": 6621, "POP1995": 8332, "POP2000": 10285, "POP2005": 12576, "POP2010": 13485, "POP2015": 14796, "POP2020": 17015, "POP2025": 19422, "POP2050": 22015 }, "geometry": { "type": "Point", "coordinates": [ 90.439453, 23.725012 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Pyongyang", "NAMEALT": "P'yongyang", "DIFFASCII": 0, "NAMEASCII": "Pyongyang", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Korea, North", "SOV_A3": "PRK", "ADM0NAME": "North Korea", "ADM0_A3": "PRK", "ADM1NAME": "P'yongyang", "ISO_A2": "KP", "LATITUDE": 39.019439, "LONGITUDE": 125.754691, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3300000, "POP_MIN": 2498797, "POP_OTHER": 2483216, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 1871859, "MEGANAME": "P'yongyang", "LS_NAME": "Pyongyang", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2498797, "MAX_POP20": 2498797, "MAX_POP50": 2498797, "MAX_POP300": 2498797, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 446, "MAX_AREAKM": 447, "MIN_AREAMI": 172, "MAX_AREAMI": 173, "MIN_PERKM": 510, "MAX_PERKM": 511, "MIN_PERMI": 317, "MAX_PERMI": 318, "MIN_BBXMIN": 125.608333, "MAX_BBXMIN": 125.608333, "MIN_BBXMAX": 125.891667, "MAX_BBXMAX": 125.891667, "MIN_BBYMIN": 38.825, "MAX_BBYMIN": 38.825, "MIN_BBYMAX": 39.191667, "MAX_BBYMAX": 39.191667, "MEAN_BBXC": 125.742428, "MEAN_BBYC": 38.996997, "COMPARE": 0, "GN_ASCII": "Pyongyang", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 12, "GN_POP": 3222000, "ELEVATION": 0, "GTOPO30": 13, "TIMEZONE": "Asia/Pyongyang", "GEONAMESNO": "GeoNames match general.", "UN_FID": 327, "UN_ADM0": "Democratic People's Republic of Korea", "UN_LAT": 39.02, "UN_LONG": 125.75, "POP1950": 516, "POP1955": 577, "POP1960": 646, "POP1965": 769, "POP1970": 987, "POP1975": 1348, "POP1980": 1842, "POP1985": 2195, "POP1990": 2526, "POP1995": 2838, "POP2000": 3117, "POP2005": 3265, "POP2010": 3300, "POP2015": 3346, "POP2020": 3434, "POP2025": 3537, "POP2050": 3630 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 125.771484, 39.027719 ], [ 121.025391, 14.604847 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Melekeok", "DIFFASCII": 0, "NAMEASCII": "Melekeok", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Palau", "SOV_A3": "PLW", "ADM0NAME": "Palau", "ADM0_A3": "PLW", "ISO_A2": "PW", "LATITUDE": 7.487396, "LONGITUDE": 134.626548, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Location adjusted. Changed scale rank.", "POP_MAX": 7026, "POP_MIN": 7026, "POP_OTHER": 0, "RANK_MAX": 5, "RANK_MIN": 5, "GEONAMEID": 1559804, "LS_NAME": "Melekeok", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 0, "MAX_POP20": 0, "MAX_POP50": 0, "MAX_POP300": 7026, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 6, "MAX_AREAKM": 6, "MIN_AREAMI": 2, "MAX_AREAMI": 2, "MIN_PERKM": 15, "MAX_PERKM": 15, "MIN_PERMI": 9, "MAX_PERMI": 9, "MIN_BBXMIN": 134.466667, "MAX_BBXMIN": 134.466667, "MIN_BBXMAX": 134.5, "MAX_BBXMAX": 134.5, "MIN_BBYMIN": 7.325, "MAX_BBYMIN": 7.325, "MIN_BBYMAX": 7.35, "MAX_BBYMAX": 7.35, "MEAN_BBXC": 134.481548, "MEAN_BBYC": 7.339881, "COMPARE": 0, "GN_ASCII": "Melekeok", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 217, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Palau", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "MultiPoint", "coordinates": [ [ 134.648438, 7.449624 ], [ 139.746094, 35.675147 ], [ 171.386719, 7.100893 ], [ 15.292969, -4.390229 ], [ 29.355469, -3.425692 ], [ 31.025391, -17.811456 ], [ 39.287109, -6.839170 ], [ 43.242188, -11.695273 ], [ 26.279297, -29.152161 ], [ 28.212891, -25.720735 ], [ 32.607422, -25.958045 ], [ 47.548828, -18.895893 ], [ 159.960938, -9.449062 ], [ 179.208984, -8.581021 ], [ -180.791016, -8.581021 ] ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Windhoek", "DIFFASCII": 0, "NAMEASCII": "Windhoek", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Namibia", "SOV_A3": "NAM", "ADM0NAME": "Namibia", "ADM0_A3": "NAM", "ADM1NAME": "Khomas", "ISO_A2": "NA", "LATITUDE": -22.570006, "LONGITUDE": 17.083546, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 268132, "POP_MIN": 262796, "POP_OTHER": 262796, "RANK_MAX": 10, "RANK_MIN": 10, "GEONAMEID": 3352136, "LS_NAME": "Windhoek", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 262796, "MAX_POP20": 262796, "MAX_POP50": 262796, "MAX_POP300": 262796, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 89, "MAX_AREAKM": 89, "MIN_AREAMI": 35, "MAX_AREAMI": 35, "MIN_PERKM": 60, "MAX_PERKM": 60, "MIN_PERMI": 37, "MAX_PERMI": 37, "MIN_BBXMIN": 17.008333, "MAX_BBXMIN": 17.008333, "MIN_BBXMAX": 17.116667, "MAX_BBXMAX": 17.116667, "MIN_BBYMIN": -22.625, "MAX_BBYMIN": -22.625, "MIN_BBYMAX": -22.491667, "MAX_BBYMAX": -22.491667, "MEAN_BBXC": 17.064196, "MEAN_BBYC": -22.551143, "COMPARE": 0, "GN_ASCII": "Windhoek", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 21, "GN_POP": 268132, "ELEVATION": 0, "GTOPO30": 1722, "TIMEZONE": "Africa/Windhoek", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 17.138672, -22.593726 ] } }
@@ -9,7 +9,7 @@
"maxzoom": "1",
"minzoom": "0",
"name": "tests/ne_110m_populated_places/out/-z1_-M10000_--drop-smallest-as-needed.json.check.mbtiles",
"strategies": "[{\"dropped_by_rate\":145,\"dropped_as_needed\":75,\"tile_size_desired\":32942},{\"dropped_as_needed\":204,\"tile_size_desired\":44415}]",
"strategies": "[{\"dropped_by_rate\":145,\"dropped_as_needed\":76,\"tile_size_desired\":33283},{\"dropped_as_needed\":206,\"tile_size_desired\":44899}]",
"type": "overlay",
"version": "2"
}, "features": [
@@ -45,8 +45,6 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 2, "FEATURECLA": "Admin-0 capital", "NAME": "Dhaka", "DIFFASCII": 0, "NAMEASCII": "Dhaka", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Bangladesh", "SOV_A3": "BGD", "ADM0NAME": "Bangladesh", "ADM0_A3": "BGD", "ADM1NAME": "Dhaka", "ISO_A2": "BD", "LATITUDE": 23.72306, "LONGITUDE": 90.408579, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 12797394, "POP_MIN": 7000940, "POP_OTHER": 14995538, "RANK_MAX": 14, "RANK_MIN": 13, "GEONAMEID": 1185241, "MEGANAME": "Dhaka", "LS_NAME": "Dhaka", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 14548962, "MAX_POP20": 21394172, "MAX_POP50": 53845691, "MAX_POP300": 78549234, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3528, "MAX_AREAKM": 49912, "MIN_AREAMI": 1362, "MAX_AREAMI": 19271, "MIN_PERKM": 1439, "MAX_PERKM": 19314, "MIN_PERMI": 894, "MAX_PERMI": 12001, "MIN_BBXMIN": 88.133791, "MAX_BBXMIN": 89.9, "MIN_BBXMAX": 90.816777, "MAX_BBXMAX": 92.908333, "MIN_BBYMIN": 22.858333, "MAX_BBYMIN": 23.482936, "MIN_BBYMAX": 24.247407, "MAX_BBYMAX": 25.583333, "MEAN_BBXC": 90.400679, "MEAN_BBYC": 24.105092, "COMPARE": 0, "GN_ASCII": "Dhaka", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 81, "GN_POP": 10356500, "ELEVATION": 0, "GTOPO30": 4, "TIMEZONE": "Asia/Dhaka", "GEONAMESNO": "GeoNames match general.", "UN_FID": 369, "UN_ADM0": "Bangladesh", "UN_LAT": 23.7, "UN_LONG": 90.4, "POP1950": 336, "POP1955": 409, "POP1960": 508, "POP1965": 821, "POP1970": 1374, "POP1975": 2221, "POP1980": 3266, "POP1985": 4660, "POP1990": 6621, "POP1995": 8332, "POP2000": 10285, "POP2005": 12576, "POP2010": 13485, "POP2015": 14796, "POP2020": 17015, "POP2025": 19422, "POP2050": 22015 }, "geometry": { "type": "Point", "coordinates": [ 90.439453, 23.725012 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Vientiane", "DIFFASCII": 0, "NAMEASCII": "Vientiane", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Laos", "SOV_A3": "LAO", "ADM0NAME": "Laos", "ADM0_A3": "LAO", "ADM1NAME": "Vientiane [prefecture]", "ISO_A2": "LA", "LATITUDE": 17.966693, "LONGITUDE": 102.59998, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 754000, "POP_MIN": 570348, "POP_OTHER": 469811, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 1651944, "LS_NAME": "Vientiane", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 471927, "MAX_POP20": 471927, "MAX_POP50": 570348, "MAX_POP300": 570348, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 166, "MAX_AREAKM": 243, "MIN_AREAMI": 64, "MAX_AREAMI": 94, "MIN_PERKM": 170, "MAX_PERKM": 283, "MIN_PERMI": 106, "MAX_PERMI": 176, "MIN_BBXMIN": 102.491667, "MAX_BBXMIN": 102.491667, "MIN_BBXMAX": 102.725, "MAX_BBXMAX": 102.816667, "MIN_BBYMIN": 17.8, "MAX_BBYMIN": 17.875, "MIN_BBYMAX": 18.083333, "MAX_BBYMAX": 18.083333, "MEAN_BBXC": 102.648054, "MEAN_BBYC": 17.967124, "COMPARE": 0, "GN_ASCII": "Vientiane", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 27, "GN_POP": 196731, "ELEVATION": 0, "GTOPO30": 174, "TIMEZONE": "Asia/Vientiane", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 102.656250, 17.978733 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Melekeok", "DIFFASCII": 0, "NAMEASCII": "Melekeok", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Palau", "SOV_A3": "PLW", "ADM0NAME": "Palau", "ADM0_A3": "PLW", "ISO_A2": "PW", "LATITUDE": 7.487396, "LONGITUDE": 134.626548, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Location adjusted. Changed scale rank.", "POP_MAX": 7026, "POP_MIN": 7026, "POP_OTHER": 0, "RANK_MAX": 5, "RANK_MIN": 5, "GEONAMEID": 1559804, "LS_NAME": "Melekeok", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 0, "MAX_POP20": 0, "MAX_POP50": 0, "MAX_POP300": 7026, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 6, "MAX_AREAKM": 6, "MIN_AREAMI": 2, "MAX_AREAMI": 2, "MIN_PERKM": 15, "MAX_PERKM": 15, "MIN_PERMI": 9, "MAX_PERMI": 9, "MIN_BBXMIN": 134.466667, "MAX_BBXMIN": 134.466667, "MIN_BBXMAX": 134.5, "MAX_BBXMAX": 134.5, "MIN_BBYMIN": 7.325, "MAX_BBYMIN": 7.325, "MIN_BBYMAX": 7.35, "MAX_BBYMAX": 7.35, "MEAN_BBXC": 134.481548, "MEAN_BBYC": 7.339881, "COMPARE": 0, "GN_ASCII": "Melekeok", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 217, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Palau", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 134.648438, 7.449624 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Majuro", "DIFFASCII": 0, "NAMEASCII": "Majuro", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Marshall Islands", "SOV_A3": "MHL", "ADM0NAME": "Marshall Islands", "ADM0_A3": "MHL", "ISO_A2": "MH", "LATITUDE": 7.103004, "LONGITUDE": 171.38, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 25400, "POP_MIN": 20500, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2113779, "LS_NAME": "Majuro", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2084, "MAX_POP20": 2084, "MAX_POP50": 2084, "MAX_POP300": 2084, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 171.366667, "MAX_BBXMIN": 171.366667, "MIN_BBXMAX": 171.375, "MAX_BBXMAX": 171.375, "MIN_BBYMIN": 7.091667, "MAX_BBYMIN": 7.091667, "MIN_BBYMAX": 7.116667, "MAX_BBYMAX": 7.116667, "MEAN_BBXC": 171.370833, "MEAN_BBYC": 7.104167, "COMPARE": 0, "GN_ASCII": "Majuro", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 20500, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Majuro", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.386719, 7.100893 ] } }
@@ -97,8 +95,6 @@
,
{ "type": "Feature", "properties": { "SCALERANK": 1, "NATSCALE": 300, "LABELRANK": 1, "FEATURECLA": "Admin-1 capital", "NAME": "Atlanta", "DIFFASCII": 0, "NAMEASCII": "Atlanta", "ADM0CAP": 0, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "United States", "SOV_A3": "USA", "ADM0NAME": "United States of America", "ADM0_A3": "USA", "ADM1NAME": "Georgia", "ISO_A2": "US", "LATITUDE": 33.830014, "LONGITUDE": -84.399949, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 4506000, "POP_MIN": 422908, "POP_OTHER": 2874096, "RANK_MAX": 12, "RANK_MIN": 10, "GEONAMEID": 4180439, "MEGANAME": "Atlanta", "LS_NAME": "Atlanta", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 2928128, "MAX_POP20": 3896411, "MAX_POP50": 3910939, "MAX_POP300": 3910939, "MAX_POP310": 3910939, "MAX_NATSCA": 300, "MIN_AREAKM": 2761, "MAX_AREAKM": 4086, "MIN_AREAMI": 1066, "MAX_AREAMI": 1578, "MIN_PERKM": 1494, "MAX_PERKM": 2459, "MIN_PERMI": 929, "MAX_PERMI": 1528, "MIN_BBXMIN": -84.875, "MAX_BBXMIN": -84.608333, "MIN_BBXMAX": -83.879976, "MAX_BBXMAX": -83.858333, "MIN_BBYMIN": 33.383333, "MAX_BBYMIN": 33.383333, "MIN_BBYMAX": 34.202715, "MAX_BBYMAX": 34.275, "MEAN_BBXC": -84.328739, "MEAN_BBYC": 33.851552, "COMPARE": 0, "GN_ASCII": "Atlanta", "FEATURE_CL": "P", "FEATURE_CO": "PPLA", "ADMIN1_COD": 0, "GN_POP": 422908, "ELEVATION": 320, "GTOPO30": 305, "TIMEZONE": "America/New_York", "GEONAMESNO": "GeoNames match general.", "UN_FID": 524, "UN_ADM0": "United States of America", "UN_LAT": 33.79, "UN_LONG": -84.34, "POP1950": 513, "POP1955": 631, "POP1960": 776, "POP1965": 959, "POP1970": 1182, "POP1975": 1386, "POP1980": 1625, "POP1985": 1879, "POP1990": 2184, "POP1995": 2781, "POP2000": 3542, "POP2005": 4307, "POP2010": 4506, "POP2015": 4695, "POP2020": 4888, "POP2025": 5035, "POP2050": 5151 }, "geometry": { "type": "Point", "coordinates": [ -84.418945, 33.833920 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 2, "NATSCALE": 200, "LABELRANK": 6, "FEATURECLA": "Admin-0 capital", "NAME": "Havana", "NAMEALT": "La Habana", "DIFFASCII": 0, "NAMEASCII": "Havana", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Cuba", "SOV_A3": "CUB", "ADM0NAME": "Cuba", "ADM0_A3": "CUB", "ADM1NAME": "Ciudad de la Habana", "ISO_A2": "CU", "LATITUDE": 23.131959, "LONGITUDE": -82.364182, "CHANGED": 5, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 2174000, "POP_MIN": 1990917, "POP_OTHER": 1930305, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 3553478, "MEGANAME": "La Habana", "LS_NAME": "Havana", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1990917, "MAX_POP20": 2051170, "MAX_POP50": 2051170, "MAX_POP300": 2051170, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 323, "MAX_AREAKM": 362, "MIN_AREAMI": 125, "MAX_AREAMI": 140, "MIN_PERKM": 240, "MAX_PERKM": 286, "MIN_PERMI": 149, "MAX_PERMI": 177, "MIN_BBXMIN": -82.533333, "MAX_BBXMIN": -82.533333, "MIN_BBXMAX": -82.208333, "MAX_BBXMAX": -82.208333, "MIN_BBYMIN": 22.916667, "MAX_BBYMIN": 22.975161, "MIN_BBYMAX": 23.183333, "MAX_BBYMAX": 23.183333, "MEAN_BBXC": -82.354344, "MEAN_BBYC": 23.076845, "COMPARE": 0, "GN_ASCII": "Havana", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 2, "GN_POP": 2163824, "ELEVATION": 0, "GTOPO30": 5, "TIMEZONE": "America/Havana", "GEONAMESNO": "GeoNames match general.", "UN_FID": 172, "UN_ADM0": "Cuba", "UN_LAT": 23.04, "UN_LONG": -82.41, "POP1950": 1116, "POP1955": 1289, "POP1960": 1436, "POP1965": 1598, "POP1970": 1779, "POP1975": 1848, "POP1980": 1913, "POP1985": 2005, "POP1990": 2108, "POP1995": 2183, "POP2000": 2187, "POP2005": 2189, "POP2010": 2174, "POP2015": 2159, "POP2020": 2151, "POP2025": 2150, "POP2050": 2150, "CITYALT": "Havana" }, "geometry": { "type": "Point", "coordinates": [ -82.353516, 23.120154 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Basseterre", "DIFFASCII": 0, "NAMEASCII": "Basseterre", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Saint Kitts and Nevis", "SOV_A3": "KNA", "ADM0NAME": "Saint Kitts and Nevis", "ADM0_A3": "KNA", "ISO_A2": "KN", "LATITUDE": 17.30203, "LONGITUDE": -62.717009, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 21887, "POP_MIN": 15500, "POP_OTHER": 21887, "RANK_MAX": 7, "RANK_MIN": 6, "GEONAMEID": 3575551, "LS_NAME": "Basseterre", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 21887, "MAX_POP20": 21887, "MAX_POP50": 21887, "MAX_POP300": 21887, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 7, "MAX_AREAKM": 7, "MIN_AREAMI": 3, "MAX_AREAMI": 3, "MIN_PERKM": 16, "MAX_PERKM": 16, "MIN_PERMI": 10, "MAX_PERMI": 10, "MIN_BBXMIN": -62.741667, "MAX_BBXMIN": -62.741667, "MIN_BBXMAX": -62.708333, "MAX_BBXMAX": -62.708333, "MIN_BBYMIN": 17.291667, "MAX_BBYMIN": 17.291667, "MIN_BBYMAX": 17.333333, "MAX_BBYMAX": 17.333333, "MEAN_BBXC": -62.726389, "MEAN_BBYC": 17.306019, "COMPARE": 0, "GN_ASCII": "Basseterre", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 3, "GN_POP": 12920, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "America/St_Kitts", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -62.709961, 17.308688 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 3, "NATSCALE": 110, "LABELRANK": 8, "FEATURECLA": "Admin-0 capital", "NAME": "Reykjavík", "DIFFASCII": 1, "NAMEASCII": "Reykjavik", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Iceland", "SOV_A3": "ISL", "ADM0NAME": "Iceland", "ADM0_A3": "ISL", "ADM1NAME": "Suðurnes", "ISO_A2": "IS", "LATITUDE": 64.150024, "LONGITUDE": -21.950014, "CHANGED": 0, "NAMEDIFF": 0, "POP_MAX": 166212, "POP_MIN": 113906, "POP_OTHER": 160116, "RANK_MAX": 9, "RANK_MIN": 9, "GEONAMEID": 3413829, "LS_NAME": "Reykjavik", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 166212, "MAX_POP20": 166212, "MAX_POP50": 166212, "MAX_POP300": 166212, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 75, "MAX_AREAKM": 75, "MIN_AREAMI": 29, "MAX_AREAMI": 29, "MIN_PERKM": 119, "MAX_PERKM": 119, "MIN_PERMI": 74, "MAX_PERMI": 74, "MIN_BBXMIN": -22.008333, "MAX_BBXMIN": -22.008333, "MIN_BBXMAX": -21.75, "MAX_BBXMAX": -21.75, "MIN_BBYMIN": 64.05, "MAX_BBYMIN": 64.05, "MIN_BBYMAX": 64.166667, "MAX_BBYMAX": 64.166667, "MEAN_BBXC": -21.8825, "MEAN_BBYC": 64.116125, "COMPARE": 0, "GN_ASCII": "Reykjavik", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 39, "GN_POP": 113906, "ELEVATION": 0, "GTOPO30": 16, "TIMEZONE": "Atlantic/Reykjavik", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ -21.928711, 64.148952 ] } }
@@ -202,8 +198,6 @@
{ "type": "Feature", "properties": { "SCALERANK": 6, "NATSCALE": 30, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Majuro", "DIFFASCII": 0, "NAMEASCII": "Majuro", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 0, "SOV0NAME": "Marshall Islands", "SOV_A3": "MHL", "ADM0NAME": "Marshall Islands", "ADM0_A3": "MHL", "ISO_A2": "MH", "LATITUDE": 7.103004, "LONGITUDE": 171.38, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 25400, "POP_MIN": 20500, "POP_OTHER": 0, "RANK_MAX": 7, "RANK_MIN": 7, "GEONAMEID": 2113779, "LS_NAME": "Majuro", "LS_MATCH": 1, "CHECKME": 5, "MAX_POP10": 2084, "MAX_POP20": 2084, "MAX_POP50": 2084, "MAX_POP300": 2084, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 3, "MAX_AREAKM": 3, "MIN_AREAMI": 1, "MAX_AREAMI": 1, "MIN_PERKM": 7, "MAX_PERKM": 7, "MIN_PERMI": 5, "MAX_PERMI": 5, "MIN_BBXMIN": 171.366667, "MAX_BBXMIN": 171.366667, "MIN_BBXMAX": 171.375, "MAX_BBXMAX": 171.375, "MIN_BBYMIN": 7.091667, "MAX_BBYMIN": 7.091667, "MIN_BBYMAX": 7.116667, "MAX_BBYMAX": 7.116667, "MEAN_BBXC": 171.370833, "MEAN_BBYC": 7.104167, "COMPARE": 0, "GN_ASCII": "Majuro", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 0, "GN_POP": 20500, "ELEVATION": 0, "GTOPO30": 1, "TIMEZONE": "Pacific/Majuro", "GEONAMESNO": "GeoNames match general.", "UN_FID": 0, "UN_LAT": 0, "UN_LONG": 0, "POP1950": 0, "POP1955": 0, "POP1960": 0, "POP1965": 0, "POP1970": 0, "POP1975": 0, "POP1980": 0, "POP1985": 0, "POP1990": 0, "POP1995": 0, "POP2000": 0, "POP2005": 0, "POP2010": 0, "POP2015": 0, "POP2020": 0, "POP2025": 0, "POP2050": 0 }, "geometry": { "type": "Point", "coordinates": [ 171.386719, 7.100893 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 4, "NATSCALE": 50, "LABELRANK": 0, "FEATURECLA": "Admin-0 capital", "NAME": "Kigali", "DIFFASCII": 0, "NAMEASCII": "Kigali", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 0, "MEGACITY": 1, "SOV0NAME": "Rwanda", "SOV_A3": "RWA", "ADM0NAME": "Rwanda", "ADM0_A3": "RWA", "ADM1NAME": "Kigali City", "ISO_A2": "RW", "LATITUDE": -1.95359, "LONGITUDE": 30.060532, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 860000, "POP_MIN": 745261, "POP_OTHER": 1152904, "RANK_MAX": 11, "RANK_MIN": 11, "GEONAMEID": 202061, "MEGANAME": "Kigali", "LS_NAME": "Kigali", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 1046787, "MAX_POP20": 2263899, "MAX_POP50": 5065653, "MAX_POP300": 7102391, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 601, "MAX_AREAKM": 8753, "MIN_AREAMI": 232, "MAX_AREAMI": 3380, "MIN_PERKM": 735, "MAX_PERKM": 9184, "MIN_PERMI": 457, "MAX_PERMI": 5707, "MIN_BBXMIN": 29.166667, "MAX_BBXMIN": 29.833333, "MIN_BBXMAX": 30.233333, "MAX_BBXMAX": 30.475, "MIN_BBYMIN": -2.991667, "MAX_BBYMIN": -2.075, "MIN_BBYMAX": -1.76663, "MAX_BBYMAX": -1.075, "MEAN_BBXC": 29.913775, "MEAN_BBYC": -2.034427, "COMPARE": 0, "GN_ASCII": "Kigali", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 9, "GN_POP": 745261, "ELEVATION": 0, "GTOPO30": 1568, "TIMEZONE": "Africa/Kigali", "GEONAMESNO": "GeoNames match general.", "UN_FID": 439, "UN_ADM0": "Rwanda", "UN_LAT": -1.95, "UN_LONG": 30.05, "POP1950": 18, "POP1955": 25, "POP1960": 34, "POP1965": 45, "POP1970": 59, "POP1975": 90, "POP1980": 128, "POP1985": 168, "POP1990": 219, "POP1995": 289, "POP2000": 497, "POP2005": 775, "POP2010": 860, "POP2015": 947, "POP2020": 1152, "POP2025": 1413, "POP2050": 1715 }, "geometry": { "type": "Point", "coordinates": [ 30.058594, -1.933227 ] } }
,
{ "type": "Feature", "properties": { "SCALERANK": 0, "NATSCALE": 600, "LABELRANK": 5, "FEATURECLA": "Admin-0 capital", "NAME": "Nairobi", "DIFFASCII": 0, "NAMEASCII": "Nairobi", "ADM0CAP": 1, "CAPALT": 0, "WORLDCITY": 1, "MEGACITY": 1, "SOV0NAME": "Kenya", "SOV_A3": "KEN", "ADM0NAME": "Kenya", "ADM0_A3": "KEN", "ADM1NAME": "Nairobi", "ISO_A2": "KE", "LATITUDE": -1.283347, "LONGITUDE": 36.816657, "CHANGED": 4, "NAMEDIFF": 0, "DIFFNOTE": "Changed scale rank.", "POP_MAX": 3010000, "POP_MIN": 2750547, "POP_OTHER": 3400962, "RANK_MAX": 12, "RANK_MIN": 12, "GEONAMEID": 184745, "MEGANAME": "Nairobi", "LS_NAME": "Nairobi", "LS_MATCH": 1, "CHECKME": 0, "MAX_POP10": 3401842, "MAX_POP20": 3401842, "MAX_POP50": 3418532, "MAX_POP300": 3418532, "MAX_POP310": 0, "MAX_NATSCA": 100, "MIN_AREAKM": 698, "MAX_AREAKM": 719, "MIN_AREAMI": 269, "MAX_AREAMI": 277, "MIN_PERKM": 554, "MAX_PERKM": 571, "MIN_PERMI": 344, "MAX_PERMI": 355, "MIN_BBXMIN": 36.608333, "MAX_BBXMIN": 36.608333, "MIN_BBXMAX": 37.066667, "MAX_BBXMAX": 37.066667, "MIN_BBYMIN": -1.433333, "MAX_BBYMIN": -1.433333, "MIN_BBYMAX": -1.083333, "MAX_BBYMAX": -1.083333, "MEAN_BBXC": 36.804283, "MEAN_BBYC": -1.249679, "COMPARE": 0, "GN_ASCII": "Nairobi", "FEATURE_CL": "P", "FEATURE_CO": "PPLC", "ADMIN1_COD": 5, "GN_POP": 2750547, "ELEVATION": 0, "GTOPO30": 1724, "TIMEZONE": "Africa/Nairobi", "GEONAMESNO": "GeoNames match general.", "UN_FID": 324, "UN_ADM0": "Kenya", "UN_LAT": -1.26, "UN_LONG": 36.8, "POP1950": 137, "POP1955": 201, "POP1960": 293, "POP1965": 404, "POP1970": 531, "POP1975": 677, "POP1980": 862, "POP1985": 1090, "POP1990": 1380, "POP1995": 1755, "POP2000": 2233, "POP2005": 2787, "POP2010": 3010, "POP2015": 3363, "POP2020": 4052, "POP2025": 4881, "POP2050": 5871 }, "geometry": { "type": "Point", "coordinates": [ 36.826172, -1.274309 ] } }
] }
] }
] }
+41
View File
@@ -184,3 +184,44 @@ char *dtoa_milo(double val) {
}
return dup;
}
unsigned long long fnv1a(std::string const &s) {
// Store tiles by a hash of their contents (fnv1a 64-bit)
// http://www.isthe.com/chongo/tech/comp/fnv/
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
unsigned long long h = fnv_offset_basis;
for (size_t i = 0; i < s.size(); i++) {
h ^= (unsigned char) s[i];
h *= fnv_prime;
}
return h;
}
// The "additional" is to make it easier to hash a serial_val attribute value and type together
unsigned long long fnv1a(const char *s, char additional) {
// http://www.isthe.com/chongo/tech/comp/fnv/
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
unsigned long long h = fnv_offset_basis;
for (size_t i = 0; s[i] != '\0'; i++) {
h ^= (unsigned char) s[i];
h *= fnv_prime;
}
h ^= (unsigned char) additional;
h *= fnv_prime;
return h;
}
unsigned long long fnv1a(size_t size, void *p) {
// http://www.isthe.com/chongo/tech/comp/fnv/
unsigned char *s = (unsigned char *) p;
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
unsigned long long h = fnv_offset_basis;
for (size_t i = 0; i < size; i++) {
h ^= (unsigned char) s[i];
h *= fnv_prime;
}
return h;
}
+3
View File
@@ -8,5 +8,8 @@ const char *utf8_next(const char *s, long *c);
std::string truncate16(std::string const &s, size_t runes);
int integer_zoom(std::string where, std::string text);
std::string format_commandline(int argc, char **argv);
unsigned long long fnv1a(std::string const &s);
unsigned long long fnv1a(const char *s, char additional);
unsigned long long fnv1a(size_t size, void *p);
#endif
+22
View File
@@ -0,0 +1,22 @@
#include <stdlib.h>
#include "thread.hpp"
// It is harder to profile tippecanoe because of its normal use of multiple threads.
// If you set TIPPECANOE_NO_THREADS in the environment, it will run everything in
// the main thread instead for more straightforward profiling. (The threads will
// then still be created so they will be reaped, but they will immediately return.)
static const char *no_threads = getenv("TIPPECANOE_NO_THREADS");
static void *do_nothing(void *arg) {
return arg;
}
int thread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) {
if (no_threads != NULL) {
void *ret = start_routine(arg);
return pthread_create(thread, attr, do_nothing, ret);
} else {
return pthread_create(thread, attr, start_routine, arg);
}
}
+3
View File
@@ -0,0 +1,3 @@
#include <pthread.h>
int thread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
+5 -2
View File
@@ -42,6 +42,7 @@
#include "milo/dtoa_milo.h"
#include "errors.hpp"
#include "geometry.hpp"
#include "thread.hpp"
int pk = false;
int pC = false;
@@ -85,6 +86,8 @@ void append_tile(std::string message, int z, unsigned x, unsigned y, std::map<st
exit(EXIT_MVT);
}
std::shared_ptr<std::string> tile_stringpool = std::make_shared<std::string>();
for (size_t l = 0; l < tile.layers.size(); l++) {
mvt_layer &layer = tile.layers[l];
@@ -213,7 +216,7 @@ void append_tile(std::string message, int z, unsigned x, unsigned y, std::map<st
outsv.s = joinval;
// Convert from double to int if the joined attribute is an integer
outval = stringified_to_mvt_value(outval.type, joinval.c_str());
outval = stringified_to_mvt_value(outval.type, joinval.c_str(), tile_stringpool);
attributes.insert(std::pair<std::string, std::pair<mvt_value, serial_val>>(joinkey, std::pair<mvt_value, serial_val>(outval, outsv)));
key_order.push_back(joinkey);
@@ -812,7 +815,7 @@ void dispatch_tasks(std::map<zxy, std::vector<std::string>> &tasks, std::vector<
}
for (size_t i = 0; i < CPUS; i++) {
if (pthread_create(&pthreads[i], NULL, join_worker, &args[i]) != 0) {
if (thread_create(&pthreads[i], NULL, join_worker, &args[i]) != 0) {
perror("pthread_create");
exit(EXIT_PTHREAD);
}
+427 -1038
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
#ifndef VERSION_HPP
#define VERSION_HPP
#define VERSION "v2.41.3"
#define VERSION "v2.42.0"
#endif