Skip to content

13 QGIS Python

Jürgen Hansmann edited this page Jun 15, 2026 · 2 revisions

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.


POC: Kantonsgrenzen von swisstopo laden und auswerten

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.

Schritt 1: Layer laden

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.

Schritt 2: Felder anzeigen

layer = iface.activeLayer()
print(layer.fields().names())

Schritt 3: Erste Features inspizieren

for feature in list(layer.getFeatures())[:10]:  # max. 10
    print(feature["NAME"], "–", feature["KANTONSNUM"])

Schritt 4: Nach Attribut filtern

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²")

Schritt 5: Features selektieren

# 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.


Grundprinzip

# Aktiven Layer abfragen
layer = iface.activeLayer()
print(layer.name())
print(layer.featureCount())

Über Features iterieren

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.

Ausgewählte Features

for feature in layer.selectedFeatures():
    print(feature["NAME"])

Neuen Layer erstellen und hinzufügen

from qgis.core import QgsVectorLayer, QgsProject

# Temporären Punktlayer erstellen
layer = QgsVectorLayer("Point?crs=EPSG:2056", "Meine Punkte", "memory")
QgsProject.instance().addMapLayer(layer)

Skripte im Editor

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

  1. Öffne QGIS und die Python-Konsole.
  2. Lade den Kantonsgrenz-Layer von swisstopo mit dem Code aus dem POC oben.
  3. Zeige alle Spaltennamen mit layer.fields().names().
  4. Gib die 5 flächengrössten Kantone aus (berechne die Fläche mit feature.geometry().area()).
  5. 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

  1. Lade messpunkte.csv direkt in QGIS (Layer → Layer hinzufügen → Getrennte Textdatei).
  2. Öffne die Python-Konsole.
  3. Gib für jeden Messpunkt Name und Höhe aus.
  4. Berechne mit Python die Höhendifferenz zwischen dem höchsten und tiefsten Punkt.

Weiterführend: PyQGIS

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

Clone this wiki locally