Wikipedia:Archiv/GEOnet Names Server (PostgreSQL)

Diese Seite gehört zum Wikipedia-Archiv.

Anleitung zum Laden der Datenbank des GEOnet Names Server in das PostgreSQL DMBS. Siehe Wikipedia:Archiv/GEOnet Names Server für die Formatbeschreibung.

Datenimport

Bearbeiten

Das Datenfile geonames_dd_dms_date_20050305.txt (Stand 5. März 2005) enthält eine Kopfzeile, die von der originalen Dokumentation abweicht. Statt "CC2" heisst es dort "C2", statt "MOD_DATE" heisst es dort "MODIFY_DATE", und die Spalte "DIM" ist vorhanden aber mit leerem Spaltennamen.

In Postgres kann eine Spalten "DIM" nicht angelegt werden, da es Schlüsselwort ist, außerdem muss es als VARCHAR (nicht NUMERIC) angelegt werden, da es regelmässig NULL ist. Im Beispiel heisst die Spalte daher "DIMm VARCHAR(10)".

Der beste Befehl zum Laden des Textfiles erfolgt über den "COPY FROM" Befehl. Dazu muss die Kopfzeile entfernt werden (im Beispiel per `sed "1d"`). Da die Datenbasis recht gross ist, wird im Beispiel auf Westeuropa/Amerika beschränkt (per `sed "/^1/!d"`).

run :
        - psql -c "DROP TABLE GEONET;"
        psql -c "CREATE TABLE GEONET (\
             RC NUMERIC(1), \
             UFI NUMERIC(10), \
             UNI NUMERIC(10), \
             LAT NUMERIC(9,7), \
             LONG NUMERIC(10,7), \
             DMS_LAT NUMERIC(6), \
             DMS_LONG NUMERIC(7), \
             UTM VARCHAR(4), \
             JOG VARCHAR(7), \
             FC VARCHAR(1), \
             DSG VARCHAR(5), \
             PC VARCHAR(1), \
             CC1 VARCHAR(2), \
             ADM1 VARCHAR(2), \
             ADM2 VARCHAR(200), \
             DIMm VARCHAR(10), \
             CC2 VARCHAR(2), \
             NT VARCHAR(1), \
             LC VARCHAR(2), \
             SHORT_FORM VARCHAR(128), \
             GENERIC VARCHAR(128), \
             SORT_NAME VARCHAR(200), \
             FULL_NAME VARCHAR(200), \
             FULL_NAME_ND VARCHAR(200), \
             MOD_DATE VARCHAR(10));"
        sed -e 1d -e "/^1/!d" geonames_dd_dms_date_20050305.txt > geonames.tmp
        psql -c "COPY GEONET FROM '`pwd`/geonames.tmp';"
        - rm geonames.tmp

Bei aktuellen Daten (Stand Oktober 2007) heißt die Spalte "UTM" (Universal Transverse Mercator) nun "MGRS" (Military Grid Reference System, 15 Zeichen). DIMm existiert nicht mehr und wurde in POP (Population, Bevölkerung) und ELEV (Elevation, Höhe) aufgeteilt. Für Deutschland genügt eine 15-stellige numerische Angabe bei POP und eine 6-stellige numerische Angabe völlig. Das Feld LC ist teilweise inzwischen dreistellig. Für Deutschland (gm.txt) ergibt sich daher folgendes Script, welches direkt in psql mit "\i script" ausgeführt werden kann:

CREATE TABLE GEONET (
    RC NUMERIC(1),
    UFI NUMERIC(10),
    UNI NUMERIC(10),
    LAT NUMERIC(9,7),
    LONG NUMERIC(10,7),
    DMS_LAT NUMERIC(6),
    DMS_LONG NUMERIC(7),
    MGRS VARCHAR(15),
    JOG VARCHAR(7),
    FC VARCHAR(1),
    DSG VARCHAR(5),
    PC VARCHAR(1),
    CC1 VARCHAR(2),
    ADM1 VARCHAR(2),
    ADM2 VARCHAR(200),
    POP NUMERIC(15),
    ELEV NUMERIC(6),
    CC2 VARCHAR(2),
    NT VARCHAR(1),
    LC VARCHAR(3),
    SHORT_FORM VARCHAR(128),
    SORT_NAME VARCHAR(200),
    FULL_NAME VARCHAR(200),
    FULL_NAME_ND VARCHAR(200),
    MOD_DATE VARCHAR(10)
);
\copy gns from 'gm.txt' null as '' delimiter as '\t' csv header quote as '\\'

Die Option "cvs header" funktioniert erst ab Postgres 8.1, allerdings erspart man sich damit das vorherige Abschneiden der ersten (Beschreibungs-)Spalte mit sed. Wer sichergehen will, das kein Unsinn passiert, sollte vorher "begin;" eingeben und bei Erfolg mit "commit;" bestätigen oder gegebenenfalls mit "rollback;" die Änderungen verwerfen.

Beispielabfrage

Bearbeiten

Eine Beispielabfrage wäre etwa "Die Koordinaten aller Flugplätze in Deutschland":

psql -c "select DMS_LAT, DMS_LONG, FULL_NAME from GEONET where CC1 = 'GM' and DSG = 'AIRP';"
 dms_lat | dms_long |       full_name        
---------+----------+------------------------
  482500 |   105600 | Augsburg
  521900 |   103300 | Braunschweig
  530200 |    84700 | Bremen
  514600 |   141700 | Cottbus
  514900 |   121100 | Dessau
  510800 |   134500 | Dresden
  510800 |   134500 | Flughafen Dresden
  511700 |    64600 | Düsseldorf
  544600 |    92300 | Flensburg-Schäferhaus
  522800 |   130800 | Gatow
  533800 |   100000 | Hamburg
  514100 |    74900 | Hamm-Lippewiesen
  522700 |    94200 | Hannover
  484200 |   113200 | Ingolstadt
  482100 |   114700 | München II
  482100 |   114700 | Flughafen München II
  513600 |    83600 | Paderborn-Lippstadt
  491300 |    70600 | Saarbrücken-Ensheim
  512400 |   121300 | Schkeuditz
  542700 |    93000 | Schleswig
  522200 |   133100 | Schönefeld
  484100 |    91200 | Stuttgart
  523300 |   131800 | Tegel
  522800 |   132400 | Tempelhof
(24 Zeilen)

siehe auch GEOnet Names Server

WikiProjekt Georeferenzierung

Bearbeiten

Eine Standardabfrage für die Georeferenzierung mittels WGS84-basiertem GEOnet Names Server kann die Dezimalnotation von Länge und Breite (LAT, LONG) sowie den Objekttyp (DSG) einbeziehen. Dies ermöglicht, eine Zeile der Ausgabe weitgehend direkt in die Wiki-Notation einer Geokoordinate umzusetzen.

Beispiel: gesucht sei Wiki-Georeferenz des Flughafens Dresden.

 psql -c "select LAT, LONG, DSG, DMS_LAT, DMS_LONG, FULL_NAME \
            from GEONET where FULL_NAME like '%Flughafen Dresden%';"
    lat     |    long    | dsg  | dms_lat | dms_long |     full_name     
------------+------------+------+---------+----------+-------------------
 51.1333333 | 13.7500000 | AIRP |  510800 |   134500 | Flughafen Dresden
(1 Zeile)
{{Koordinate Artikel|51.1333333_N_13.7500000_E_type:AIRP|51°08'00" N 13°45'00" O}}

siehe auch: Wikipedia:WikiProjekt Georeferenzierung

Weblinks:

Bearbeiten