Mit Geopandas GIS-Funktionen direkt in Python ausführen

Mit dem Import von Geopandas in ein Python-Programm stehen euch eine Handvoll GIS-Basisfunktionen zur Verfügung, die das Arbeiten mit Geodaten in Python wesentlich vereinfachen. Das allein wäre allerdings noch keine Neuheit. Die Kombination von GIS-Funktionen mit einer Auswahl von Pandas-Funktionen, dem quasi Python-Standard für tabellarische Datenverarbeitung, macht das Modul zum allerdings zum Schweizer Taschenmesser für den Umgang mit GIS-Attributtabellen in Skripten. In diesem Artikel gebe ich Hinweise zur Installation des Moduls, gehe kurz auf die Hauptfunktionen ein und stelle euch ein Jupyter Notebook zur Verfügung, was die wesentlichen Operationen für einen Schnellstart enthält. Mit diesen Informationen seid ihr direkt in der Lage auch in euren Python-Projekten einfache GIS-Operationen und Geodaten Im- und Exports durchzuführen.

Hier Literatur-Links zum Einsatz von Python in GIS-Projekten.

Installation von Geopandas

Das Geopandas-Modul kann auf unterschiedliche Wege zu eurer Python-Umgebung hinzugefügt werden. Ich verwende für diesen Artikel die Anaconda Distribution, die ihr euch als Python- und Jupyter Notebook Umgebung einfach auf jedem Betriebssystem installieren könnt.
Solltet ihr eine andere Umgebung für den Einsatz von Geopandas haben, finden sich hier alternative Installationsmöglichkeiten, um das Modul für euer Projekt nutzbar zu machen (pip / from source).
Über den Conda-Paketmanager kann das Modul entweder über die Shell oder über den Anaconda-Navigator installiert werden. Bitte achtet auch darauf, dass ihr Geopandas in die Python-Umgebung installiert, die ihr später auch für euer Python GIS Projekt verwendet. Im professionellen Einsatz von Python baut man sich für jedes Projekt ein passendes “Virtual Environment”, das genau die Module enthält, die man für das Projekt benötigt. Das macht es später auch möglich, die Umgebung leicht auf einem anderen System einzusetzen.

Startfenster des Anaconda-Navigators. Im oberen Bereich könnt das gewählte Python-Environment sehen (hier “test_env”) und über Environments Geopandas installieren.

Geopandas im Einsatz

Das folgende Fallbeispiel habe ich in einem Jupyter-Notebook zusammenstellt, das ihr hier herunterladen könnt.

Import von Geopandas

Wenn ihr das Geopandas Modul also eurer Python-Umgebung hinzugefügt habt, könnt ihr das Modul über die bekannte Import-Logik von Python einfach eurem Projekt hinzufügen.

Geopandas kann nach der Installation nun in beliebigen Python-Projekten importiert werden. Im Beispiel hier die Anwendung in einem Jupyter-Notebook.

Mit dem Import (siehe Codezeile unten) stehen euch nun alle Geopandas-Methoden für die Anwendung in diesem Python-Projekt zur Verfügung.

import geopandas as gp

Um in diesem Artikel einige wichtige Funktionen an realen Daten vorzustellen, lade ich mir die Länderflächen von Natural Earth und alle OSM Bürostandorte über osmdata.xyz herunter (übrigens eine sehr spannende Datenquelle, wenn es um Feature-basierten Zugriff auf OSM Daten geht).

Import von Geodaten

Das Importieren von Geodaten mit Geopandas ist über den universell einsetzbaren Befehl:

geopandas.read_file("Pfad zur Datei")
#oder
gp.read_file("Pfad zur Datei") je nach Import des Geopandas-Moduls.

leicht möglich. In unserem Beispielprojekt importieren wir so die Polygone der 110m_NaturalEarth Daten mit Länderflächen und einen auf Europa zugeschnittenen Punktdatensatz mit allen Bürostandorten, die der OSM-Datensatz aktuell kennt.

ne_110admincountries = gp.read_file("/home/usr/Dokumente/scripts/geopandas/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp")

osm_offices_europe = gp.read_file("/home/usr/Dokumente/diggeo/Geopandas/OSM_offices_europe.shp")

Abruf der Attributtabelle

Sobald die Geodaten per Geopandas in die Python-Umgebung als Variablen import sind, können gewohnte Befehle aus dem Pandas-Modul (Standard-Pythonmodul für die Arbeit mit tabellarischen Daten) genutzt werden. Um die Attributtabelle der Shapefiles aufzurufen, kann man einfach mit dem .head-Befehl einen Überblick über das Datenmodell verschaffen. Ohne die Angabe einer Zählervariable zeigt .head() die ersten fünft Einträge der Datentabelle. Nachdem wir den korrekten Import der Daten so überprüft haben, wollen wir im Beispiel an jeden OSM Bürostandort das Land dranschreiben, in dem der Standort liegt.

Darstellung von Werten einer Shape-File Attributtabelle mit Geopandas

Zusammenführung von Vektorgeodaten

Für die Zusammenführung von Vektorgeodaten hält Geopandas den Befehl:

geopandas.sjoin(Datensatz1, Datensatz2, …)

bereit. Die Positionierung der Argumente in den Klammern gibt an, in welcher Reihenfolge die Datensätze räumlich verschnitten werden sollen. In unserem Beispiel setzen wir die OSM-Adresspunkte als erstes Parameter in die Funktion und schreiben an diese Punkte die räumlich zugehörige Information aus den Natural-Earth-Länderflächen.

Print einer Kartendarstellung mit Matplotlib und Geopandas

Selbstverständlich kann in Geopandas auch ein einfacher Kartenplot erfolgen. Hierzu kann ein einfacher .plot()-Befehl angewendet werden. Durch die zusätzliche Eingabe von Style-Argumenten in den Plot-Befehl kann die Kartendarstellung im Detail designt werden. Auch können Subplot mit z.B. Ländergrenzen angefertigt werden. Für eine detaillierte Kartenerstellung inkl. sauberem Labeling der Legendenelemente würde ich allerdings auf ein Desktop-GIS zurückgreifen.

Plotergebnis für alle Bürostandorte, die im OSM-Datensatz für Europa bekannt sind.

Datenexport

Der Export des verschnittenen Datensatzes kann mit dem Befehl:

gp.to_file(driver = 'ESRI Shapefile', filename= "result.shp")

umgesetzt werden. Hiermit schreibt ihr eine Shape-File in ein Verzeichnis und könnt damit zum Beispiel in einem Desktop-GIS weiterarbeiten.

Weitere Funktionen

Geopandas bietet darüber hinaus weitere Funktionalitäten an, die sich alle im Geopandas-Manual nachvollziehen lassen.

Fazit zu Geopandas

Mir persönlich gefällt vor allem die einfache Handhabe von Geopandas. Mit diesem Python-Modul kann man GIS-Operationen direkt im Python umsetzen, ohne einen Umweg über ein Desktop-GIS oder eine GIS-Python-Schnittstelle (wie z.B. PyQgis oder ArcPy) gehen zu müssen. Sobald allerdings umfangreichere GIS-Funktionen benötigt werden, sollte man sich wieder mit den Profi-Tools der bekannten GIS-Programme ausstatten. Aktuell steckt Geopandas noch am Anfang seiner Entwicklung. Ich würde mich freuen, wenn das Modul weiter wächst und die bestehenden Python-Tools ergänzt bzw. die Verarbeitung von Geodaten noch breiteren Einzug in Python-Projekten hält.

Leave a Reply

avatar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

  Abonnieren  
Benachrichtige mich bei