-
Notifications
You must be signed in to change notification settings - Fork 1
13 QGIS Python
QGIS hat eine eingebaute Python-Konsole. Damit kann man direkt mit dem geöffneten Projekt, den geladenen Layern und den Geodaten interagieren - ohne ein separates Skript zu schreiben, und ohne 47 Menüklicks für eine einfache Abfrage.
Wer bis hierhin durchgehalten hat, versteht jetzt alles, was dazu nötig ist: Variablen, Schleifen, Bedingungen, Funktionen. Die QGIS-Konsole ist einfach Python - in einem anderen Kontext.
Die Konsole öffnet man über: Erweiterungen → Python-Konsole (oder Ctrl+Alt+P).
Die QGIS Python-Konsole funktioniert auf Windows, macOS und Linux identisch - QGIS bringt sein eigenes Python mit.
Hier ein vollständiges Proof-of-Concept, das zeigt, wie man einen swisstopo-Layer direkt aus der Python-Konsole lädt und auswertet - ohne vorher irgendetwas manuell zu klicken.
swisstopo stellt swissBOUNDARIES3D als GeoJSON über eine öffentliche URL bereit. QGIS kann diesen Layer direkt von dort laden:
from qgis.core import QgsVectorLayer, QgsProject
url = (
"https://data.geo.admin.ch/ch.swisstopo.swissboundaries3d-kanton-flaeche.fill/"
"swissboundaries3d-kanton-flaeche.fill/"
"swissboundaries3d-kanton-flaeche.fill_2056.json"
)
layer = QgsVectorLayer(url, "Kantone", "ogr")
if layer.isValid():
QgsProject.instance().addMapLayer(layer)
print(f"Layer geladen: {layer.name()}, {layer.featureCount()} Features")
else:
print("Fehler: Layer konnte nicht geladen werden.")Der Layer erscheint danach in der QGIS-Legende - genau so, als hätte man ihn manuell über den Layer-Dialog hinzugefügt.
layer = iface.activeLayer()
print(layer.fields().names())for feature in list(layer.getFeatures())[:10]: # max. 10
print(feature["NAME"], "–", feature["KANTONSNUM"])for feature in layer.getFeatures():
if feature["KANTONSNUM"] <= 3: # BE, ZH, LU (nach KANTONSNUM sortiert)
print(feature["NAME"], f"– Fläche: {feature.geometry().area() / 1e6:.0f} km²")# Alle Kantone mit Fläche > 2000 km² auswählen
ids = [
f.id() for f in layer.getFeatures()
if f.geometry().area() / 1e6 > 2000
]
layer.selectByIds(ids)
print(f"{len(ids)} Kantone selektiert")Die selektierten Features werden in QGIS gelb hervorgehoben - Python-Code und Karte interagieren direkt.
iface ist das Interface zu QGIS selbst - automatisch verfügbar, kein Import nötig. QgsProject.instance() ist das aktuelle QGIS-Projekt.
# Aktiven Layer abfragen
layer = iface.activeLayer()
print(layer.name())
print(layer.featureCount())layer = iface.activeLayer()
for feature in list(layer.getFeatures())[:10]: # max. 10, sonst endlos bei grossen Layern
name = feature["NAME"]
geom = feature.geometry()
print(f"{name}: Fläche {geom.area() / 1e6:.0f} km²")feature["NAME"] greift auf die Attributspalte NAME zu - genau wie bei einem Dictionary.
for feature in layer.selectedFeatures():
print(feature["NAME"])from qgis.core import QgsVectorLayer, QgsProject
# Temporären Punktlayer erstellen
layer = QgsVectorLayer("Point?crs=EPSG:2056", "Meine Punkte", "memory")
QgsProject.instance().addMapLayer(layer)Grössere Skripte schreibt man nicht in der Konsole, sondern im eingebauten Editor (neben der Konsole: Symbol «Skript-Editor öffnen»). Der Editor erlaubt mehrzeilige Skripte, Syntaxhervorhebung und das Speichern von .py-Dateien.
Übung: Kantone auswerten
qgis_kantone.py
- Öffne QGIS und die Python-Konsole.
- Lade den Kantonsgrenz-Layer von swisstopo mit dem Code aus dem POC oben.
- Zeige alle Spaltennamen mit
layer.fields().names().- Gib die 5 flächengrössten Kantone aus (berechne die Fläche mit
feature.geometry().area()).- Selektiere alle Kantone, die an den Kanton Bern grenzen.
Tipp: Mit
layer.fields().names()siehst Du die genauen Spaltennamen - Gross-/Kleinschreibung zählt.
Übung: Messpunkte laden
qgis_messpunkte.py
- Lade
messpunkte.csvdirekt in QGIS (Layer → Layer hinzufügen → Getrennte Textdatei).- Öffne die Python-Konsole.
- Gib für jeden Messpunkt Name und Höhe aus.
- Berechne mit Python die Höhendifferenz zwischen dem höchsten und tiefsten Punkt.
Die vollständige QGIS Python-API heisst PyQGIS. Damit lassen sich unter anderem:
- Symbologie und Darstellung steuern
- Verarbeitungsalgorithmen (Processing) automatisieren
- Eigene QGIS-Plugins entwickeln
Dokumentation: docs.qgis.org/latest/de/docs/pyqgis_developer_cookbook
Finde mehr Informationen und Ressourcen in Wie weiter?