GDAL/OGR: Verwaltungseinheiten ermitteln, durch die ein GPX-Track führt

Hier wird beschrieben, wie man mit den OGR-Tools der GDAL-Bibliothek die Verwaltungseinheiten (Landkreise, Departements, Kantone) ermitteln kann, durch die ein GPX-Track führt. In diesem Beitrag wurde bereits beschrieben, wie man das interaktiv mit QGIS machen kann. Die hier beschriebene Methode arbeitet nur mit der Kommandozeile und ist daher besonders dann geeignet, wenn man mehrere Tracks zu bearbeiten hat.

Neben der GPX-Datei mit dem Track werden die Grenzpolygonen der Verwaltungseinheiten in einem geeigneten Geoformat benötigt. Auf https://www.gadm.org/ stehen solche Daten länderweise im Geojson-Format zum Download zur Verfügung. Führt der Track durch mehrere Länder, werden die Daten der betreffenden Länder in einer Datei und einem Layer zusammengeführt:

ogrmerge.py -single -overwrite_ds\
            -nln borders\
            -o borders.geojson\
             gadm41_FRA_2.json gadm41_DEU_2.json

Da ogr2ogr nur eine Eingabedatei akzeptiert, wird zunächst der Track mit den Grenzpolygonen in einer Datei zusammengefasst:

ogrmerge.py -o merged.gpkg track.gpx borders.geojson

Damit kann die eigentliche Suche durchgeführt werden. Dazu nutzt man die Möglichkeit, mit ogr2ogr spatiale Abfragen in SpatiaLite-Syntax auf den Eingabedaten auszuführen:

ogr2ogr -dialect SQLite\
        -sql "select distinct borders.name_2,borders.geom\
        from borders,track_tracks\
        where not isEmpty(st_intersection(track_tracks.geom, borders.geom))"\
        out.gpkg merged.gpkg

Die Datei out.gpkg enthält die Geodaten der vom Track berührten Verwaltungseinheiten. Damit kann das Ergebnis z.B. in QGIS grafisch dargestellt werden. Ist man nur an den Namen der Verwaltungseinheiten interessiert, gibt man das Ergebnis in eine CSV-Datei aus:

ogr2ogr -dialect SQLite\
        -sql "select distinct borders.name_2\
        from borders,track_tracks\
        where not isEmpty(st_intersection(track_tracks.geom, borders.geom))"\
        out.csv merged.gpkg