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