- Download http://download.geonames.org/export/dump/allCountries.zip (251MB) to %ProgramData%\geonames\, and unzip it.
- In PostgreSQL, create a table to import the data into:
create table geonames ( geoname_id int primary key, name text, ascii_name text, alternate_names text, latitude numeric(8,6), longitude numeric(9,6), feature_class char(1), feature_code text, country_code char(2), cc2 TEXT, admin1_code text, admin2_code text, admin3_code text, admin4_code text, population bigint, elevation int, dem text, timezone text, modification_date date );
Run the COPY command:
copy geonames from 'c:/programdata/geonames/allCountries/allCountries.txt' with ( format text, null '' )
On my laptop it took ~65 seconds. There were 9,071,443 rows.
Let's say we just want to view the ISO 3166-1 countries. Lets's create an index on the feature_code column so we can quickly filter on it (warning, this can take a while):
create index on geonames (feature_code);
And now a view to show only the ISO countries:
create view iso_countries as select * from geonames where ( feature_code IN ( 'PCL', 'PCLD', 'PCLF', 'PCLI', 'PCLIX', 'PCLS' ) or geoname_id in (2461445, 5880801, 607072, 6697173) --western sahara, american samoa, svalbar and jan mayen, antarctica ) and geoname_id <> 831053 --kosovo order by country_code;
No comments:
Post a Comment