Metainformationen zur Seite
QGIS Ausdrücke (Expressions)
Ausdrücke (Expressions oder Regeln) sind überaus bedeutend, denn sie kommen in vielen Bereichen von QGIS vor: beim Styling, bei Abfragen, Feldberechnungen, zum Filtern und Auswählen und bei der Erstellung von Karten oder Kartenserien. Schenken wir diesem Thema also besondere Aufmerksamkeit.
Ausdrücke und Ausdrucksdialog
Ausdrücke sind im übertragen Sinne Formeln, welche in einer QGIS-eigenen, SQL-ähnlichen Syntax geschrieben sind und in mehrere Ebenen verschachtelt sein können. Mit ihnen werden Bedingungen formuliert sowie damit verbundene Anweisungen, die bei Erfüllung oder Nichterfüllung der Bedingung eintreten. Wir können Ausdrücke fortlaufend schreiben oder mit Hilfe des Ausdruckseditors
per Mausklick erstellen. Es steht uns eine große Anzahl an Funktionen zur Verfügung, welche mit einer Suchmaske gefiltert werden können. Für fortgeschrittene Anwender besteht die Möglichkeit über den Funktionseditor, eigene Python-Scripte anstelle der QGIS-Ausdrücke zu verwenden.
- Auswahl der in der Attributtabelle vorhandenen Felder
- …und deren Werte
- Funktionsfeld – hier wird der Ausdruck eingetippt; Syntax wird hervorgehoben und Fehler (rotes Dreieck) markiert
- Fortgeschrittene Anwender:innen können auch Python-Funktionen (Funktionseditor) verwenden
...und wo finde ich den Ausdrucksdialog?
Überall in QGIS lassen sich mit Ausdrücken Dinge steuern: Beschriftungen, Symbolisierung, Berechnungen, Geometrien, Kartendarstellung etc… Betrachten wir die QGIS Oberfläche, finden wir auf Anhieb mehrere Stellen mit dem Epsilon-Symbol
. Und dahinter verbirgt sich der Ausdruckseditor oder Ausdrucksdialog.
Aber nicht nur da, sondern auch an vielen weiteren Stellen. Zum Beispiel bei der Datendefinierten Übersteuerung mit diesem Symbol:
- finden Sie es?
Übersteuerung mit Ausdrücken, Variablen oder Feldwerten
(Fast) überall da, wo Einstellungen am Stil, der Beschriftung oder in der Druckzusammenstellung vorgenommen werden können, befindet sich dieses kleine unscheinbare Symbol:
Es steht für daten- oder regelbedingte Übersteuerung und ermöglicht uns die statischen per Hand eingegebenen Werte durch dynamische zu ersetzen. Diese stammen aus
- Regeln (Ausdrücke) (siehe oben)
- Variablen (können in den Projekteigenschaften frei vergeben werden)
- Feldwerte (stammen aus der Attributtabelle des Layers) oder
- Hilfsspeicher (geometrielose Tabelle, welche mit der Projektdatei gespeichert wird, und als Datenspeicher dient)
Diese Funktion ist zugegeben etwas fortgeschritten, expandiert aber die Möglichkeiten der Visualisierung und Beschriftung ganz erheblich. Außerdem sind dynamische Werte Abhängig von den (Layer-)Daten und nicht von einer Nutzereingabe, wodurch sich beispielsweise gut mit Templates arbeiten lässt: eine Projektvorlage mit Datendefinierten Einstellungen, wird sich den Daten anpassen. Ein manuelles Nacharbeiten (bei dem oft Dinge übersehen oder falsch eingegeben werden) ist nicht notwendig!
mehr dazu (in Englisch) im QGIS Handbuch
Häufige Ausdrücke an praktischen Beispielen
Attribute (Spalte in der Attributtabelle) werden immer in doppelte Anführungszeichen gesetzt: „ATTRIBUT“; Werte (Zelle der Attributtabelle) in einfachen Anführungszeichen: 'WERT'.
Groß- und Kleinschreibung, Zeilenumbrüche oder aufeinanderfolgende Leerzeichen spielen bei der QGIS-SQL-Syntax keine Rolle und können verwendet werden
Einfache Ausdrücke mit häufigen Operatoren
| Ausdruck | Syntax | Ergebnis | Erläuterung |
|---|---|---|---|
"Vogelart" = 'Mäusebussard' OR "Vogelart" = 'Rotmilan' | a OR b
| Alle Mäusebussarde und alle Rotmilane werden angesprochen | Abfrage an einem Attribut mit zwei möglichen Werten |
"Vogelart" IN ('Mäusebussard','Rotmilan') | a IN (...) | Alle Mäusebussarde und alle Rotmilane werden angesprochen | Kürzere / elegantere Alternative zu OR |
"Vogelart" = 'Mäusebussard' AND "Verhalten" = 'kreisend' | a = b AND c = d | Alle kreisenden Mäusebussarde | Zwei Bedingungen (zwei Attribute) müssen erfüllt sein |
"Vogelart" = 'Mäusebussard' AND "Verhalten" != 'kreisend' | a = b AND c != d | Alle nicht‑kreisenden Mäusebussarde | Kombination Gleichheit + Ungleichheit |
Einfache Ausdrücke mit Zahlenwerten
| Ausdruck | Syntax | Ergebnis | Erläuterung |
|---|---|---|---|
"Vogelart" = 'Rotmilan' AND "Hoehe" > 500 | a > b
| Alle Rotmilane über 500 m | Vergleich größer als |
"Vogelart" = 'Rotmilan' AND "Hoehe" > 100 AND "Hoehe" <= 500 | a > b AND a <= c | Alle Rotmilane zwischen 101 m und 500 m (inkl. 500) | Bereichsfilter (untere Grenze exklusiv, obere inklusiv) |
round("Hoehe",2) | round(VALUE[,places=0]) | Höhe auf 2 Nachkommastellen | Rundet numerische Werte |
rand(1,20) | rand(MIN,MAX[,seed]) | Zufallszahl zwischen 1 und 20 | Pseudozufallswert; optional reproduzierbar mit seed |
sonst. Ausdrücke
| Ausdruck | Syntax | Ergebnis | Erläuterung |
|---|---|---|---|
"Vogelart" IS NOT NULL | a IS NOT NULL | Alle Zeilen mit Eintrag bei „Vogelart“ | NULL steht für fehlenden Wert |
"Vogelart" IS NULL | a IS NULL | Alle Zeilen ohne Eintrag bei „Vogelart“ | Prüfung auf fehlenden Wert |
COALESCE("Vogelart_A","Vogelart_B") | COALESCE(expr1,expr2,…) | Erster nicht-NULL-Wert wird zurückgegeben | Fallback-Kette |
Geometrie-Ausdrücke
| Ausdruck | Syntax | Ergebnis | Erläuterung |
|---|---|---|---|
$length | $length | Länge einer Linie | Gilt für Linien; berücksichtigt Projekt-Ellipsoid & Einheiten |
$area | $area | Fläche eines Polygons | Gilt für Polygone; Einheiten gem. Projekteinstellungen |
$perimeter | $perimeter | Umfang eines Polygons | Gilt für Polygone |
$x | $x | X-Koordinate eines Punktes | Gilt für Punkte |
$y | $y | Y-Koordinate eines Punktes | Gilt für Punkte |
Weitere Geometrie-Ausdrücke (kurz)
| Ausdruck | Ergebnis / Zweck | Hinweis |
|---|---|---|
area($geometry) | Fläche (Alternative zu $area) | Funktionsform |
round($area/10000,1) | Fläche in ha | m² → ha |
centroid($geometry) | Schwerpunkt als Punkt | Labelanker |
num_points($geometry) | Anzahl Stützpunkte | Komplexität |
transform($geometry,'EPSG:25833','EPSG:4326') | Geometrie umprojizieren | CRS-Wechsel |
Overlay / räumliche Ausdrücke
| Ausdruck / Muster | Ergebnis / Zweck |
|---|---|
overlay_intersects('gemeinden',"GEN") | Gemeindename bei Schnitt |
overlay_nearest('messstellen',"NAME") | Nächstgelegene Messstelle |
array_length(overlay_intersects('parzellen',"FSNR")) | Anzahl Parzellen im Schnitt |



Fragen, Hinweise und Fehler kommen hier hin: