Software-Tipps
Q(GIS)&A – QGIS-Formulare bauen, die mitdenken: Vorgabewerte, bedingte Felder und automatische Zuordnungen
Elisa Schneider aus unserem QGIS-Team hat an einem Proof-of-Concept für ein Projekt gearbeitet, dessen Ziel es war, die Papierdokumentation abzuschaffen und ein QGIS-Plugin für die Verwaltung georeferenzierter Daten aufzubauen. Die Infrastruktur und auch die Entwicklung des Plugins waren wie gewohnt unproblematisch. Das größte Hindernis für diese Migration waren die Daten, die nicht georeferenziert und nicht schematisch dargestellt waren. Um diese beim Umstieg auf eine GDI zu verwenden, müssten sie durch das Zeichnen von Vektorebenen in QGIS digitalisiert werden. Das ist sehr zeitintensiv.
Elisa beschreibt in diesem Blog-Beitrag, welche Funktionen Formulare in QGIS grundsätzlich haben und welche Möglichkeiten es gibt, um den Prozess der Georeferenzierung von Daten zu automatisieren, zu beschleunigen und Fehler zu vermeiden.
1. Grundlagen - Formulare in QGIS
In QGIS dienen Formulare dazu, die Attributdaten eines Layers strukturiert anzuzeigen, zu erfassen und zu bearbeiten. Kurz gesagt: Sie bestimmen, wie Eingabemasken für Features aussehen und funktionieren.
Typische Funktionen von Formularen in QGIS:
- Anzeige von Attributen: Felder eines Objekts werden übersichtlich in einer Maske dargestellt.
- Bearbeitung von Daten: Nutzende können Werte einfacher eingeben oder ändern als direkt in der Attributtabelle.
- Definition benutzerfreundlicher Eingabehilfen, wie z.B. Dropdown-Listen, Kalender für Datumsfelder.
- Strukturierung komplexer Eingaben: Felder können in Tabs, Gruppen oder Abschnitten organisiert werden.
- Validierung und Kontrolle: Formulare helfen, Fehleingaben zu vermeiden.
- Verknüpfung mit Beziehungen: Bei relationalen Daten können verknüpfte Datensätze direkt im Formular angezeigt oder bearbeitet werden.
- Individuelle Anpassung an Arbeitsprozesse: Formulare können so gestaltet werden, dass sie zu bestimmten Fachanwendungen oder Erfassungsprozessen passen.
In diesem Blogbeitrag wird eine weitere Anwendungsmöglichkeit der QGIS-Formulare ausführlich vorgestellt: Die Automatisierung der Dateneingabe.
2. Georeferenzierung beschleunigen - Formulare mit dynamischen Feldern
In QGIS muss ein Feld oft nur ausgefüllt werden, wenn in einem anderen Feld eine bestimmte Bedingung erfüllt ist. Zum Beispiel muss bei einer Vogelkartierung das Feld „Art“ nur ausgefüllt werden, wenn bei der Kategorie „Beobachtung“ tatsächlich eine Beobachtung vorliegt.
Das lässt sich in QGIS unkompliziert umsetzen:
Das Feld „Beobachtung" steuert, ob das Feld „Art" sichtbar ist oder nicht. Dafür wählen wir für „Beobachtung" den Bedienelement-Typ Kontrollkästchen. Dabei gilt:
Aktivierter Status → Wert = 1
Deaktivierter Status → Wert = 0
Das Feld „Art" wird in einen Gruppenrahmen platziert. Für diesen Gruppenrahmen aktivieren wir die Option „Sichtbarkeit mit Ausdruck steuern" und tragen folgende Bedingung ein:
"Beobachtung" = 1
Sobald das Kontrollkästchen aktiviert wird, springt der Wert auf 1 – und die Gruppe mit „Art" wird automatisch eingeblendet. Wird es deaktiviert, verschwindet das Feld wieder. Die folgende Abbildung zeigt, wie wir das machen können:
Der Ausdruck kann einfach gehalten sein, aber auch komplexere Bedingungen sind möglich. Wenn z. B. die Waldfläche, in der sich der Punkt befindet, größer als 1 ha sein soll, damit wir die Art eingeben können, lautet der Ausdruck:
"Beobachtung" = 1
AND
overlay_nearest('Waldflaeche', $area)[0] > 10000
So funktioniert es:
- „Beobachtung“ = 1 — prüft, ob das Feld Beobachtung am aktuellen Punkt den Wert 1 hat.
- overlay_nearest(‚Waldflaeche‘, $area)[0] — ermittelt das nächstgelegene Objekt in der Ebene Waldflaeche und gibt dessen Fläche (in m²) zurück. [0] wählt das erste (nächstgelegene) Ergebnis aus.
- > 10000 — 1 Hektar = 10.000 m². Damit wird geprüft, ob das nächstgelegene Waldfläche-Polygon größer als 1 ha ist.
Mein Tipp: `$area` gibt Werte in den Quadrat-Einheiten des CRS der Ebene zurück. Stellt sicher, dass das CRS eures Projekts Meter als Maßeinheit verwendet (z. B. EPSG:25832), damit 10.000 m korrekt 1 Hektar entsprechen. Wenn Ihr das CRS Grad benutzt (z. B. EPSG:4326), sollte `area(transform($geometry, layer_property('Waldflaeche','crs'), 'EPSG:25832'))` anstelle von `$area` verwendet werden.
3. Felder automatisch ausfüllen
Am hilfreichsten ist es, wenn die Felder automatisch ausgefüllt werden können. Ich zeige im Folgenden verschiedene (einfache und komplexe) Anwendungsfälle.
A. Fester Standardwert
Die einfachste Möglichkeit ist, einen festen Wert festzulegen, der beim Erstellen eines neuen Features als Standardwert angezeigt wird. Benutzer können diesen Wert ändern: Allerdings beschleunigt sich der Prozess, wenn in den meisten Fällen der Standardwert beibehalten wird.
Wenn das Feld automatisch ausgefüllt wird und vom Nutzer nicht geändert werden soll, kann es auch ganz vom Formular entfernt werden.
Das mag in manchen Fällen nützlich sein, ist aber recht eingeschränkt. Die Kombination aus QGIS-Formularen und Ausdrücken ermöglicht wesentlich dynamischere Optionen. Ich stelle sie im Folgenden dar.
B. Nach Position definierter Wert
Beim Digitalisieren von Geodaten kommt es häufig vor, dass ein Attribut nicht manuell eingetippt, sondern direkt aus der Geometrie des neuen Features abgeleitet werden kann. Zum Beispiel: Welche Koordinaten hat der gerade gesetzte Punkt? Wie lang ist die gezeichnete Linie? Wie groß ist das neue Polygon? Solche Informationen stecken bereits in der Geometrie selbst – wir müssen sie nur abfragen.
Genau dafür bietet QGIS die Möglichkeit, im Attributformular einen Ausdruck als Vorgabewert zu hinterlegen. Statt ein Feld nach dem Anlegen eines Features von Hand auszufüllen, wird der Wert automatisch berechnet – basierend auf den geometrischen Eigenschaften des neuen Features.
Wo wird der Ausdruck eingetragen?
Den Ausdruck konfigurieren wir in den Layer-Eigenschaften unter Attributformulare. Dort wählen wir das gewünschte Feld aus und tragen im Bereich Vorgabewert den entsprechenden Ausdruck ein.
C. Den Wert mithilfe von Attributen anderer Ebenen festlegen
Wenn wir Beobachtungspunkte haben, die wir in verschiedenen Waldgebieten digitalisieren, können wir im Formular festlegen, dass der Name der Fläche automatisch in die Attributtabelle des Punktes eingetragen wird. Der Ausdruck für den Vorgabewert lautet:
overlay_nearest('Waldflaeche', "Name")[0]
So funktioniert es:
- overlay_nearest('Waldflaeche', "Name") — sucht das nächstgelegene Feature in der Ebene Waldflaeche und gibt den Wert des Feldes "Name" als Array zurück.
- [0] — wählt das erste (nächstgelegene) Ergebnis aus dem Array.
Dieses Formularfeld kann auch ausgeblendet werden. Dann wird der Wert automatisch ausgefüllt und kann von den Nutzenden nicht geändert werden.
D. Den Wert anhand anderer Objekte derselben Ebene automatisch bestimmen
Für dieses Beispiel nehme ich den Anwendungsfall, an dem ich für den POC gearbeitet habe: ein Netzwerk aus Kabeln zur Messung von Leckagen in Rohrleitungen.
In unserem Kabelnetz gibt es eine Regel: Pro Kabelkreis (Projekt) darf es nur eine Messdose geben – aber beliebig viele Anschlussdosen. Damit beim Erfassen einer neuen Dose nicht jedes Mal manuell nachgeschaut werden muss, übernimmt folgender Ausdruck die Entscheidung automatisch:
array_first(overlay_intersects('Projekte', "project_id"))
dosen_type
with_variable(
'proj_id',
array_first(overlay_intersects('Projekte', "project_id"))
if(
aggregate(
layer:='Dosen',
aggregate:='count',
expression:="dose_type",
filter:= "project_id" = @proj_id
AND "dose_type" = 'MESSDOSE'
) = 0,
'MESSDOSE',
'ANSCHLUSSDOSE'
)
)
Ist im Projekt noch keine Messdose vorhanden, wird automatisch der Typ „Messdose" zugewiesen. Existiert bereits eine, wird der Typ automatisch auf „Anschlussdose" gesetzt.
So funktioniert es:
- array_first(overlay_intersects('Projekte', "project_id")) — ermittelt die Projekt-ID des Projekts, in dem die neue Dose liegt, und speichert sie in der Variable @proj_id.
- aggregate(... count ... filter:= "project_id" = @proj_id AND "dose_type" = 'MESSDOSE') — zählt, wie viele Messdosen in diesem Projekt bereits vorhanden sind.
- if(... = 0, 'MESSDOSE', 'ANSCHLUSSDOSE') — ist das Ergebnis 0, gibt es noch keine Messdose → der Standardwert wird MESSDOSE. Existiert bereits eine, wird automatisch ANSCHLUSSDOSE eingetragen.
E. Den Wert anhand einer Eigenschaft des neuen Objekts festlegen
Anschließend richten wir unser Netzwerk ein und möchten die ID der Messdose als Feld im Netzwerk Ebene dokumentieren. Der Schlüssel liegt in der Funktion `current_value`, mit der wir den Wert eines anderen Feldes übernehmen können. `current_value` übernimmt nur Werte, die Nutzende manuell eingegeben haben – automatisch gesetzte Vorgabewerte werden als `NULL` gelesen. Die Lösung besteht darin, den Standardwert des anderen Feldes bei Bedarf neu zu berechnen. Dafür verwenden wir:
aggregate(
layer:='Dosen',
aggregate:='max',
expression:="dose_id",
filter:="project_id" =
CASE
WHEN current_value('project_id') IS NOT NULL THEN current_value('project_id')
ELSE
aggregate(
layer:='Projekte',
aggregate:='max',
expression:="project_id",
filter:=intersects($geometry, currentExtent())
AND area(intersection($geometry, currentExtent())) = aggregate(...)
)
END
AND "dose_type" = 'MESSDOSE'
)
- CASE WHEN current_value('project_id') IS NOT NULL THEN current_value('project_id') — prüft zuerst, ob das Feld project_id im Formular bereits ausgefüllt ist. Wenn ja, wird dieser Wert direkt verwendet.
- ELSE aggregate(layer:='Projekte', ...) — ist project_id noch leer, wird das aktuelle Projekt automatisch anhand des sichtbaren Kartenausschnitts ermittelt: Es wird das Projekt-Polygon gesucht, das den größten Flächenanteil im aktuellen Kartenfenster hat.
- aggregate(layer:='Dosen', aggregate:='max', expression:="dose_id", filter:= ... AND "dose_type" = 'MESSDOSE') — sucht im ermittelten Projekt die Dose, deren Typ MESSDOSE ist, und gibt deren dose_id zurück.
Fazit
QGIS-Formulare bieten weit mehr als nur einfache Eingabemasken. Mit Ausdrücken als Vorgabewert, bedingter Sichtbarkeit und Verknüpfungen zwischen den Ebenen lässt sich der Digitalisierungsprozess erheblich beschleunigen – und gleichzeitig die Fehlerquote deutlich senken. Die hier vorgestellten Strategien sind nur ein Ausgangspunkt: Je nach Projektanforderung lassen sich die Ausdrücke beliebig kombinieren und erweitern. Das Ergebnis ist ein Formular, das mitdenkt – und Nutzenden die Arbeit so einfach wie möglich macht.
Über den Autor
Steckbrief
Elisa Schneider studierte Umweltwissenschaften mit den Schwerpunkten GIS und Umweltmodellierung in Freiburg. Seit Dezember 2025 arbeitet sie bei WhereGroup als GIS-Spezialistin. Ihr besonderes Interesse liegt im Umstieg von proprietärer Software auf Open-Source-Lösungen.