INSPIRE GML Daten in eine Postgres Datenbank laden

Posted on Mi 13 April 2022 in Blog

Im österreichischen INSPIRE Portal gibt es einen Datensatz zur Bevölkerung auf Ebene des 100m ETRS-LAEA Raster. Die Daten dazu finden sich hier.

Der Datensatz wird im .gml Format zur Verfügung gestellt. GML steht für Geography Markup Language und ist ein XML-Format. Die Felder wurden gemäß der INSPIRE Datenharmonisierungsvorgaben aufbereitet.

Um die Daten in die Datenbank zu kommen, wird das Kommandozeilenprogramm ogr2ogr verwendet. Mit folgendem Befehl wird ein SQL-File erstellt:

ogr2ogr -f "PGDump" name_der_datei.sql -s_srs EPSG:3035 -t_srs EPSG:3035 -overwrite -progress pd_popreg_100m_7767c33f-302c-11e3-beb4-0000c1ab0db6.gml --config PG_USE_COPY yes

Mit einem weiteren Befehl kann man die Daten mittels psql in die Datenbank importieren

psql *connection_params* < name_der_datei.sql

Natürlich könnte man bei ogr2ogr auch PostgreSQL statt PGDump als Output-Format verwenden, aber ich wollte mich mit dem Output zuerst vertraut machen.

Die Daten sind durch diese Befehle dann in der Tabelle statisticaldistribution in der entsprechenden Postgres-Datenbank gelandet. In dieser Tabelle war dann genau eine Zeile, die alle relevanten Informationen umfasst.

Um die Daten mit in QGIS anzusehen, muss man die Daten etwas bearbeiten. Einerseits braucht man die Regionalstatistische Rastereinheiten der STATISTIK AUSTRIA. Diese werden im Open Data Portal der STATISTIK AUSTRIA zur Verfügung gestellt. Diese Daten wurden mittels shp2pgsql eingespielt und in einer Tabelle namens regionalstatistische_rastereinheiten_000100 gespeichert.

In der Tabelle statisticaldistribution befinden sich die, für mich, interessanten Werte in den Spalten value und spatial_id. In beiden Spalten werde die Werte als Array-Datentypen gespeichert, d.h. für meinen Zweck müssen sie noch extrahiert werden. Hierfür wird der unnest Befehl im SQL-Statement verwendet. Zusätzlich werden noch die Texte in der Spalte spatial_id bearbeitet, damit diese mit dem Namen in den Regionalstatistische Rastereinheiten zusammenpassen.

Das finale Statement zum Extrahieren der Daten schaut dann wie folgt aus:

select unnest(value) as value, replace(unnest(spatial_href), 'https://data.inspire.gv.at/77679c2c-302c-11e3-beb4-0000c1ab0db6/su.StatisticalGridCell/', '') as spatial_id from statisticaldistribution

Und verknüpfen kann man die extrahierten Daten dann noch mit der Tabelle regionalstatistische_rastereinheiten_000100 wie folgt:

with unnest_data as (   
    select unnest(value) as value, replace(unnest(spatial_href), 'https://data.inspire.gv.at/77679c2c-302c-11e3-beb4-0000c1ab0db6/su.StatisticalGridCell/', '') as spatial_id from statisticaldistribution s
) 
select * from regionalstatistische_rastereinheiten_000100 rr , unnest_data as ud where rr."name" = ud.spatial_id