These cities are coming from the GeoNames Gazetteer.
all cities with a population > 1000 or seats of adm div (ca 150.000) [...]
Thus, this file is updated monthly and new cities are added as world population rises.
See https://www.geonames.org/datasources/ for the list of data sources used by GeoNames.
npm install --save cities.json
Either on node or the browser (with webpack
) it get as simple as this:
ES5
const cities = require('cities.json');
ES6
import cities from 'cities.json';
Since webpack >= v2.0.0, importing of JSON files will work by default.
This Json version is an array of object of the following shape:
- ISO 3166-1 alpha-2 country code
- name
- Latitude
- Longitude
- Admin code 1: the code of an administrative division (see Administrative divisions)
- Admin code 2: the code of an administrative subdivision (see Administrative divisions)
[
{
"name": "Lyon",
"lat": "45.74846",
"lng": "4.84671",
"country": "FR",
"admin1": "84",
"admin2": "69"
}
// etc.
]
These cities can pretty easily be matched with countries by code using the following dataset: https://github.com/annexare/Countries
Names and depth of these divisions (and subdivisions) may vary greatly between countries, thus the use of these less expressive property names :
admin1
codeadmin2
code- etc.
For example admin1
code for a US city, would stand for the state :
[
{
"name": "Boston",
"lat": "42.35843",
"lng": "-71.05977",
"country": "US",
"admin1": "MA", // Massachusetts
"admin2": "025"
}
]
You may map the admin1
code to the full English name through the ./admin1.json file.
Where the code
is the concatenation of the country
code and the admin1
code, for example:
US.MA
→ Massachusetts
For ./admin2.json concatenate country
, admin1
code and the admin2
code:
US.MA.025
→ Suffolk County
This work is licensed under a Creative Commons Attribution 3.0 License.