QGIS Feldrechner (Field Calculator): 24 getestete Ausdrücke und die Fallen
Veröffentlicht am
Um in QGIS eine Spalte zu berechnen, öffnest du die Attributtabelle des Layers, klickst auf das Symbol des Field Calculator (Feldrechner, Ctrl+I), wählst ein neues oder bestehendes Feld, tippst einen Ausdruck ein und klickst auf OK. Dieser Teil geht schnell. Schwierig wird es, wenn der Ausdruck ohne Fehler durchläuft und dabei NULL, Quadratgrad oder die falsche Klasse schreibt.
Am 7. November 2026 habe ich 24 Ausdrücke im Feldrechner auf echten OpenStreetMap Layern für Indiranagar und benachbarte Stadtbezirke in Bengaluru, Indien, ausgeführt (8.709 Gebäude, 854 Straßen, 35 Schulen, 37 Bushaltestellen, 10 Bezirke) und jeweils die übliche falsche Variante daneben laufen lassen. Unten findest du die Sammlung mit den exakten Ausgabewerten, die stillen Fallen, gemessen gegen eine ellipsoidische Referenz, und was passierte, als ich die drei schwierigsten Aufgaben einem KI-Agenten in QGIS übergab.
Was ist der QGIS Feldrechner?
Der QGIS Feldrechner (Field Calculator) ist das eingebaute Werkzeug, das Spalten der Attributtabelle mit QGIS Ausdrücken erstellt oder aktualisiert. Er kann Geometriewerte wie Fläche, Länge und Koordinaten berechnen, Text umschreiben, Zeilen mit CASE WHEN klassifizieren und Zählungen oder Distanzen aus anderen Layern deines Projekts holen.
QGIS bietet dir tatsächlich vier Stellen, an denen dieselben Ausdrücke laufen, und die falsche Wahl ist der erste Weg, Arbeit zu verlieren:
- Der Dialog Field Calculator (
Ctrl+I): bearbeitet den Layer direkt. Du kannst eine neue Spalte anlegen oder eine bestehende überschreiben, für alle Objekte oder nur für die ausgewählten. Deine Änderungen liegen im Bearbeitungspuffer, bis du sie speicherst. - Ein virtuelles Feld (Kontrollkästchen im Dialog): berechnet den Ausdruck jedes Mal neu, wenn du die Tabelle öffnest oder die Karte zeichnest. Als ich die Grundfläche von Gebäude
fid27 in meinem Test-Layer verdoppelte, blieb seine normale Flächenspalte bei197.355, während das virtuelle Feld auf789.418sprang. Der Haken: Ein virtuelles Feld lebt in deiner.qgsProjektdatei, nicht im GeoPackage oder Shapefile. Öffnest du die Datei in einem neuen Projekt, ist die Spalte weg. - Das Processing Werkzeug "Field calculator" (
native:fieldcalculator): schreibt einen ganz neuen Ausgabe-Layer und lässt deinen Original-Layer unberührt. Nutze es in Modellen oder wenn du nicht direkt bearbeiten willst. Achte auf@row_number, das hier bei0beginnt und im Dialog bei1. - Die Schnellberechnungsleiste oben in der Attributtabelle: aktualisiert eine bestehende Spalte, ohne den ganzen Dialog zu öffnen, praktisch für einen kurzen Einzeiler, wenn du ohnehin im Bearbeitungsmodus bist.
Ein Feld Schritt für Schritt berechnen
Den Field Calculator öffnen
Klicke mit der rechten Maustaste auf deinen Layer und wähle Open Attribute Table, dann klicke auf das Abakus-Symbol in der Werkzeugleiste der Attributtabelle. Ist der Layer im Layers-Panel ausgewählt, öffnet Ctrl+I den Field Calculator direkt.
Auswahl und Feldeinstellungen prüfen
Sind auf deiner Karte Objekte ausgewählt, ist Only update N selected feature(s) standardmäßig angehakt. Entferne den Haken, wenn der ganze Layer berechnet werden soll. Wähle Create a new field (oder Update existing field), setze den Output field name und wähle den Output field type (Decimal number (real) für Flächen und Längen mit Nachkommastellen, Integer für ganze Zählungen, Text (string) für Beschriftungen und Klassen).
Den Ausdruck schreiben und die Preview prüfen
Tippe deinen Ausdruck in den Editor links oder durchsuche die Funktionsliste in der Mitte und füge per Doppelklick ein. Prüfe vor dem Klick auf OK immer die Zeile Preview unter dem Editor. Zeigt sie einen Fehler, NULL oder eine Zahl wie 0.0000003, korrigiere den Ausdruck, bevor du ihn in 8.000 Zeilen schreibst.
Auf OK klicken und die Änderungen speichern
Klicke auf OK. War der Layer nicht im Bearbeitungsmodus, warnt QGIS dich, dass der Bearbeitungsmodus automatisch eingeschaltet wird. Wenn die Berechnung fertig ist, klicke auf das Disketten-Symbol Save Edits in der Werkzeugleiste der Attributtabelle, damit die Spalte auf die Festplatte geschrieben wird.
Hier ist der Dialog auf dem Straßen-Layer, bereit, eine Straßenklasse zu schreiben:

Wenn du den Namen einer Funktion nicht kennst, nutze das Suchfeld über der mittleren Spalte. Es filtert den Funktionsbaum und öffnet rechts die Dokumentation, mit Reihenfolge der Parameter und Beispielen.

Die getestete Ausdrucks-Sammlung
Jeder Ausdruck unten lief am 7. November 2026 in QGIS 3.44.15 auf unseren OpenStreetMap Layern von Bengaluru (gespeichert in EPSG:4326, Projektellipsoid WGS 84). Wenn du Testdaten für dein eigenes Gebiet brauchst, zeigt unsere Anleitung, wie du OpenStreetMap Daten in QGIS herunterlädst, wie du Gebäude, Straßen und Punkte sauber holst.
Die Beispielwerte für Gebäude unten stammen von den Gebäuden fid 27, 28, 30, 60 und 62 (mit Adresse und Geschosszahl) und fid 1, 2 und 3 (mit keinem von beiden).
Fläche, Länge, Umfang und Koordinaten
| Was du willst | Ausdruck zum Einfügen | Getestetes Ergebnis am Beispiel | Übliche falsche Variante (und was passiert) |
|---|---|---|---|
| Gebäudefläche in m² (ellipsoidisch) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($geometry) liefert 0.0 (etwa 3e-7 Quadratgrad), ohne Fehler |
| Gebäudefläche in m² (projiziert in UTM 43N) | area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 197.60, 110.99, 141.29, 219.98, 319.22 | Eine Transformation nach 'EPSG:3857' (Web Mercator) bläht die Fläche hier um +5,95 % auf |
| Straßenlänge in Metern (ellipsoidisch) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($geometry) liefert 0.005681, 0.000074 (Grad), ohne Fehler |
| Straßenlänge in Metern (projiziert in UTM 43N) | length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 616.72, 7.99, 1105.01, 9.14, 72.29 | Eine Transformation nach 'EPSG:3857' bläht die Straßenlänge im Median um +3,03 % auf |
| Gebäudeumfang in Metern | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($geometry) liefert auf einem EPSG:4326 Layer Grad |
| X des Polygon-Schwerpunkts (Rechtswert in Metern) | x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 786714.46, 786437.79, 786237.28 | $x auf einem Polygon liefert NULL ohne Fehler; x_at($geometry, 0) liefert den ersten Stützpunkt (77.642744), nicht die Mitte |
| Y des Polygon-Schwerpunkts (Hochwert in Metern) | y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 1435359.45, 1435116.32, 1436699.32 | y(centroid($geometry)) liefert Grad (12.97...), wenn der Layer in EPSG:4326 ist |
| Zeilennummer oder Objekt-ID | @row_number oder $id | 1, 2, 3, 4 (Dialog) oder 27 für $id bei fid 27 | @row_number beginnt im GUI-Dialog bei 1, im Processing Werkzeug native:fieldcalculator aber bei 0 |
Schreibst du $area in ein Ausgabefeld vom Typ Integer statt Decimal number (real) (getestet mit dem Processing Field calculator), rundet QGIS auf die nächste ganze Zahl (197.35 wird 197, 110.86 wird 111), statt abzuschneiden.
Bedingte Klassen (CASE WHEN und Umgang mit NULL)
| Was du willst | Ausdruck zum Einfügen | Getestetes Ergebnis am Beispiel | Übliche falsche Variante (und was passiert) |
|---|---|---|---|
| Größenklasse aus der Fläche | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | Nicht getestet |
| NULL-Geschosse durch eine Standard-Ganzzahl ersetzen | coalesce(to_int("building:levels"), 1) | 4, 4, 2, 4, 3 (und 1, wo levels NULL ist) | "building:levels" + 'a' liefert '4a', weil OSM-Tags als Textstrings gespeichert sind |
| Höhenklasse mit separat gehaltenen NULLs | CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END | mid, mid, low, mid, mid (und unknown für fid 1) | Ohne WHEN ... IS NULL landet jede leere Zeile in ELSE, und 7.636 nicht erfasste Gebäude werden als 'high' eingestuft |
Text bereinigen, formatieren und Datumswerte
| Was du willst | Ausdruck zum Einfügen | Getestetes Ergebnis am Beispiel | Übliche falsche Variante (und was passiert) |
|---|---|---|---|
| Hausnummer und Straße sicher verbinden | concat("addr:housenumber", ' ', "addr:street") | '594 12th Main Road', '83/4 13th Main Road' (' ', wenn beide NULL sind) | "addr:housenumber" || ' ' || "addr:street" liefert NULL, sobald eine der Spalten NULL ist |
Suffix (Road, Main, Cross) vom Straßennamen entfernen | regexp_replace("name", '\\s+(Road|Main|Cross)$', '') | 'Chinmaya Mission Hospital', '13th Main', '12th Main' | Ein einfacher Backslash \s+ scheitert mit Invalid regular expression '?+(Road|Main|Cross)$' |
| Eine ID auf 12 Stellen mit Nullen auffüllen | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | Nicht getestet |
| Eine Zahl für die Anzeige formatieren | format_number($area, 1) | '197,4', '110,9' ('3 958,7' für 3958.7 auf einem Mac mit Komma-Gebietsschema) | Die Ausgabe ist Text, der dem Gebietsschema deines Betriebssystems folgt (Dezimalkomma und schmales geschütztes Leerzeichen), du kannst danach also nicht mehr damit rechnen |
| Tage zwischen zwei Datumswerten | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) allein liefert ein QgsInterval Objekt; to_date('07/11/2026') scheitert, wenn du nicht 'dd/MM/yyyy' als zweites Argument übergibst |
Achte auch auf die Länge des Ausgabefelds, wenn du Text in ein GeoPackage oder Shapefile schreibst. Als ich concat("addr:housenumber", ' ', "addr:street") in Processing in ein Textfeld der Länge 40 schrieb, brach der ganze Lauf ohne Ausgabe ab, weil eine Straße (" 80 Feet Road(Sir C.V. Raman Hospital Road)") 43 Zeichen lang war.
Räumliche Zählungen, Summen und nächste Distanz über Layer hinweg
Mit diesen Ausdrücken fragt ein Layer einen anderen Layer deines Projekts ab, ohne einen separaten Spatial Join in QGIS.
| Was du willst | Ausdruck zum Einfügen | Getestetes Ergebnis am Beispiel | Übliche falsche Variante (und was passiert) |
|---|---|---|---|
| Gebäude zählen, die jeden Bezirk berühren | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Ohne filter:=... bekommt jeder Bezirk die Gesamtzahl des ganzen Layers (8709), ohne Fehler |
| Gesamte Gebäudefläche in ha pro Bezirk | round(aggregate('buildings', 'sum', $area, filter:=intersects($geometry, geometry(@parent))) / 10000, 3) | 0.565, 20.292, 5.605, 59.116, 1.037, 14.094, 16.646, 7.991, 21.39, 1.7 | Summiert ganze Grundflächen, die die Bezirksgrenze berühren, sodass Grenzgebäude in beiden Bezirken zählen |
| Schulen in jedem Bezirk zählen | array_length(overlay_contains('schools', "osm_id")) | 0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (Summe: 35) | overlay_contains('schools') ohne zweites Argument liefert true oder false, keine Zahl |
| Distanz in Metern zur nächsten Bushaltestelle | distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(array_first(overlay_nearest('bus_stops', $geometry)), 'EPSG:4326', 'EPSG:32643')) | 125.17, 49.39, 199.59, 158.39, 187.97, 74.67, 123.00, 226.61 | distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) liefert 0.001142 (Grad) |
| Bushaltestellen im Umkreis von 300 m eines Gebäudes zählen | aggregate('bus_stops', 'count', "osm_id", filter:=distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(geometry(@parent), 'EPSG:4326', 'EPSG:32643')) <= 300) | 1, 1, 4, 2, 2, 6, 7, 7 | array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) liefert 37 (jede Haltestelle), weil 300 als 300 Grad gelesen wird |
Fünf Fallen im Feldrechner, die ohne Fehlermeldung scheitern
Ich habe 70 Hilfekommentare unter QGIS Tutorials auf YouTube gelesen: 48 waren echte Fragen zum Schreiben eines Ausdrucks, und 8 davon betrafen einen Ausdruck, der ungültig ist, NULL liefert oder nichts auswählt. Schlimmer ist der Fall, nach dem niemand fragt, weil der Ausdruck läuft und plausible Zahlen schreibt. Hier sind die fünf Fallen, die wir an unseren Daten aus Bengaluru gemessen haben.
1. $area gegen area($geometry), und was das Projektellipsoid bewirkt
$area und area($geometry) rechnen nicht dasselbe, und mindestens ein Tutorial von 2026 behauptet, $area liefere in einem geografischen KBS Quadratgrad. Das tat es in keiner der beiden getesteten Projekteinstellungen. Am 7. November 2026 haben wir beides, dazu transform(), an den ersten 200 Gebäuden und 200 Straßen unserer EPSG:4326 Layer von Bengaluru gegen eine ellipsoidische WGS 84 Referenz (QgsDistanceArea) gemessen.
$areaund$lengthnutzen das Projektellipsoid (eingestellt unterProject > Properties > General > Measurements). Ist das EllipsoidWGS 84, liefert$areagenaue Quadratmeter, selbst wenn Layer und Projekt in Grad sind (EPSG:4326).- Ist das Projektellipsoid auf
None / Planimetricgesetzt, lieferte$areaauf unseremEPSG:4326Layer trotzdem keine Quadratgrad. In QGIS 3.44.15 gab es Quadratmeter zurück, die über die 200 Gebäude hinweg um +3,24 % zu groß waren. area($geometry)undlength($geometry)sind immer planimetrisch im eigenen KBS des Layers. Auf einemEPSG:4326Layer liefertarea($geometry)Quadratgrad (etwa0.0000003für ein Haus), was in einer normalen Dezimalspalte auf0.0gerundet wird.- Eine Transformation nach Web Mercator (
EPSG:3857) vorarea()bläht jedes Gebäude um +5,95 % auf, selbst auf der Breite von Bengaluru (13° N), und Straßenlängen um +3,03 %. Eine Transformation in die lokale UTM-Zone (EPSG:32643) bleibt innerhalb von +0,12 % der ellipsoidischen Fläche.
Ausdruck auf EPSG:4326 Layern (n = 200 Gebäude, 200 Straßen) | Median-Fehler gegen WGS 84 Ellipsoid | Max. Fehler |
|---|---|---|
$area (Projektellipsoid WGS 84) | 0.00% | 0.00% |
$area (Projektellipsoid None) | +3.24% | +3.25% |
$perimeter (Projektellipsoid None) | +1.72% | +2.25% |
$length auf Straßen (Projektellipsoid None) | +1.31% | +2.61% |
area($geometry) | -100.00% (Quadratgrad) | -100.00% |
length($geometry) auf Straßen | -100.00% (Grad) | -100.00% |
area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.12% | +0.12% |
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) auf Straßen | +0.06% | +0.06% |
area(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +5.95% | +5.96% |
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) auf Straßen | +3.03% | +3.26% |
Wenn dir unklar ist, warum sich EPSG:4326, EPSG:3857 und UTM-Zonen so unterschiedlich verhalten, lies unsere Erklärung, was ein KBS in QGIS ist.
2. overlay_nearest liest max_distance in Layer-Einheiten, nicht in Metern
Die Funktion overlay_nearest ist schnell, weil sie einen räumlichen Index nutzt, und sie hat einen praktischen Parameter max_distance. Aber max_distance wird immer in den Koordinateneinheiten des Layers gemessen.
Liegen unsere Gebäude und Bushaltestellen in EPSG:4326 (Grad) und du schreibst array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), sucht QGIS nach Bushaltestellen im Umkreis von 300 Grad. Das deckt die ganze Erde ab, also bekommt jedes einzelne Gebäude 37 (alle 37 Bushaltestellen des Layers). Auch max_distance:=0.003 für 300 Meter zu raten funktioniert nicht sauber, weil ein Längengrad und ein Breitengrad nicht gleich viele Meter lang sind: Bei Gebäude fid 62 lieferte 0.003 8 Haltestellen statt der echten 7. Projiziere entweder beide Layer vorher nach UTM oder nutze das Muster aggregate(..., filter:=distance(transform(...))) aus der letzten Zeile der räumlichen Tabelle oben.
3. NULL-Zeilen fallen direkt in den ELSE-Zweig von CASE WHEN
In unserem Datensatz aus Bengaluru haben nur 1.073 der 8.709 Gebäude (12,3 %) einen Tag building:levels. Die übrigen 7.636 sind NULL.
Schreibst du CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, ergeben beide <= Vergleiche auf einer NULL-Zeile "unbekannt", und die Zeile fällt in ELSE. Am Ende stufst du 7.636 nicht erfasste Gebäude als Hochhäuser ein, ohne eine einzige Warnung. Setze immer WHEN "field" IS NULL THEN 'unknown' als ersten Zweig (oder lass ELSE weg, damit nicht passende Zeilen NULL bleiben), wenn deine Daten Lücken haben.
4. "Only update selected features" lässt den Rest der Spalte NULL
Sobald auch nur ein Objekt auf der Karte ausgewählt ist, hakt der Field Calculator Only update N selected feature(s) automatisch an.
Als ich die 39 primary Straßen in Bengaluru auswählte und CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END in ein neues Feld road_rank schrieb, setzte QGIS 'arterial' in diese 39 Zeilen und ließ die übrigen 815 Straßen (darunter alle 28 secondary Straßen, die mein Ausdruck ausdrücklich nannte) auf NULL.

5. Doppelte gegen einfache Anführungszeichen (warum "building" = "yes" NULL liefert)
In QGIS Ausdrücken bedeuten doppelte Anführungszeichen " " einen Feldnamen und einfache Anführungszeichen ' ' einen Textwert.
Tippst du "building" = "yes", sucht QGIS nach einer Spalte namens building und vergleicht sie mit einer anderen Spalte namens yes. Weil es keine Spalte yes gibt, ergibt der Ausdruck NULL (und der zugrunde liegende QgsExpression Parser meldet Field 'yes' not found). Ebenso scheitert ein Spaltenname mit Doppelpunkt, etwa building:levels aus OpenStreetMap, ohne doppelte Anführungszeichen mit syntax error, unexpected Unknown_CHARACTER. Ein Doppelklick auf Feldnamen in der Liste Fields and Values setzt jedes Mal die richtigen Anführungszeichen.
Die Syntax überspringen: dieselben Berechnungen mit einem KI-Agenten
$area von Hand zu schreiben geht schnell. Ein verschachteltes aggregate() mit zwei transform() Aufrufen, einem Geometriebezug auf @parent und einem Distanzfilter zu schreiben, ist der Punkt, an dem Leute auf Stack Exchange landen.
Wir bauen AI Agent, ein Chat-Panel, das in QGIS andockt, in diesem Abschnitt geht es also um unser eigenes Werkzeug. Weil es in deinem offenen QGIS Projekt läuft, prüft es deine Layernamen, Feldtypen, das KBS und eindeutige Werte, bevor es den Field Calculator oder Processing Werkzeuge für dich ausführt.
Am 7. November 2026 habe ich AI Agent (v1.9.4, Effort Medium, Berechtigungen Balanced) die drei mehrstufigen Berechnungen aus unserem Testplan gegeben, ein Satz pro Chat, auf genau denselben fünf Layern von Bengaluru in EPSG:4326.
| Aufgabe | Exakt gesendeter Prompt | Zeit des Agenten | Ergebnis gegen unsere unabhängige Prüfung |
|---|---|---|---|
| A. Zählung in der Nähe | "Add a field called bus_stops_300m to the buildings layer with the number of bus stops within 300 metres of each building." | 39 s | Bestanden. Integer-Feld angelegt, alle 8.709 Gebäude gefüllt, 0 Abweichungen gegen unsere Zählung von Grundfläche zu Haltestelle in EPSG:32643 (Bereich 0 bis 8). |
| B. Klassifizierung + Stil | "Class the buildings into low (1 or 2 levels), mid (3 or 4) and high (5 or more) from the building:levels field, store the class in a new field called height_class, and style the buildings by that class." | 18 s | Bestanden. 563 low, 442 mid, 68 high (alle 1.073 entsprechen unserer Regel). Die 7.636 Zeilen ohne Geschosse blieben NULL und wurden als vierte, graue Kategorie "Unknown levels" dargestellt. |
| C. Schulzahl und Gebäudefläche pro Bezirk | "For each ward, add the number of schools and the total building area in hectares." | 37 s | Bestanden (mit Methodenunterschied). school_count stimmte in 10/10 Bezirken (Summe 35). building_ha stimmte mit den zugeschnittenen Grundflächen in 10/10 Bezirken überein (Summe 148,25 ha). |
Bei Aufgabe A tappte der Agent nicht in die 300-Grad-Falle von overlay_nearest. Sein Werkzeugprotokoll zeigt, dass er beide Layer prüfte, das KBS kontrollierte, die Berechnung in metrischen Einheiten von den Gebäudegrundflächen aus durchführte (nicht von Schwerpunkten, was die Antwort bei 667 Gebäuden geändert hätte) und vor der Antwort Minimum und Maximum prüfte.

Bei Aufgabe B prüfte er zuerst die eindeutigen Werte von building:levels, sah, dass 7.636 der 8.709 Gebäude keine Geschosszahl hatten, ließ diese Zeilen in height_class auf NULL, statt sie in high fallen zu lassen, und legte einen kategorisierten Stil mit 4 Klassen auf die Karte.

Die gerenderte Karte macht deutlich, warum die Prüfung auf NULL bei OpenStreetMap Daten zählt: Die grauen Gebäude sind die 87,7 %, für die kein Tag building:levels erfasst ist.

Bei Aufgabe C wichen die building_ha Werte des Agenten leicht von der Zeile Hektar pro Bezirk unserer Sammlung ab: New Thippasandra kam auf 20.151 ha statt 20.292 ha (-0,69 %), Jeevan Bhimanagar auf -0.14% und Indiranagar auf -0.06%. Als ich nachsah, warum, hatte der Agent tatsächlich eine strengere geometrische Methode genutzt als mein intersects() Filter: Er schnitt die Gebäudepolygone an den Bezirksgrenzen zu, bevor er ihre Flächen summierte, sodass grenzüberschreitende Gebäude nicht doppelt in zwei Bezirken zählten, und er erwähnte das in seiner Antwort. Den Bezirks-Layer ließ er allerdings im Bearbeitungsmodus mit nicht gespeicherten Änderungen und sagte mir in der Antwort, dass die Änderungen noch nicht gespeichert waren.

Hier ist die Attributtabelle des Bezirks-Layers, nachdem diese Änderungen gespeichert wurden:

Drei Aufgaben sind eine kleine Stichprobe (n = 3), und ich habe klare Prompts gegeben, die Felder und Klassengrenzen nannten, sieh das also als Demonstration und nicht als Benchmark. Für einfache Formeln wie $area oder concat() ist der Dialog Field Calculator schneller, als eine Chatnachricht zu tippen. Seinen Platz verdient ein Agent bei layerübergreifenden Aggregaten, KBS-Transformationen oder mehrstufigen Processing Ketten, oder wenn du sonst ein PyQGIS Skript schreiben würdest. Andere Assistenten kannst du auf unserem QGIS AI Hub vergleichen.
So haben wir gemessen. Alle Tests liefen am 7. November 2026 in QGIS 3.44.15-Solothurn auf macOS mit OpenStreetMap Daten für Indiranagar, Bengaluru (Begrenzungsrahmen 12.968, 77.634, 12.986, 77.656, ODbL) im Projekt-KBS EPSG:4326. Jeder Ausdruck der Sammlung wurde gegen eine unabhängige Berechnung in Python oder mit QgsDistanceArea an denselben Objekt-IDs geprüft. Flächen- und Längenfehler wurden an den ersten 200 Gebäuden und 200 Straßen nach fid gegen QgsDistanceArea mit dem Ellipsoid WGS 84 (EPSG:7030) gemessen. AI Agent 1.9.4 lief mit Effort Medium und Berechtigungen Balanced, in einem neuen Chat pro Aufgabe. Unsere Zahlen zu YouTube-Fragen stammen aus 70 Hilfekommentaren unter 59 Videos, gefiltert aus einem Korpus von 25.276 Kommentaren.
Häufige Fragen
Warum ist meine $area Berechnung in QGIS falsch oder liefert 0?
Prüfe zuerst, ob du area($geometry) statt $area getippt hast. Auf einem Layer in Grad (EPSG:4326) liefert area($geometry) Quadratgrad (etwa 0.0000003 für ein Haus), was in einem Dezimalfeld auf 0.0 gerundet wird. Nutze $area mit dem Projektellipsoid WGS 84 unter Project > Properties > General > Measurements, oder projiziere die Geometrie im Ausdruck mit area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) in deine lokale UTM-Zone. Meide EPSG:3857 (Web Mercator), das in unserem Test Gebäudeflächen selbst bei 13° N um +5,95 % aufblähte.
Wie schreibe ich eine IF- oder CASE-Anweisung im QGIS Feldrechner?
Für zwei Ergebnisse nutzt du if(condition, value_if_true, value_if_false), zum Beispiel if($area < 100, 'small', 'large'). Für drei oder mehr Klassen nutzt du CASE WHEN ... THEN ... ELSE ... END:
CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END
Setze die Prüfung IS NULL an den Anfang. Sonst fällt jede Zeile mit leerem Wert in ELSE.
Warum hat der Feldrechner für alle oder die meisten Zeilen NULL geliefert?
Vier häufige Ursachen:
- Ein Objekt war auf der Karte ausgewählt, also war Only update N selected feature(s) angehakt und jede nicht ausgewählte Zeile blieb
NULL. - Du hast Text mit
||verbunden (etwa"addr:housenumber" || ' ' || "addr:street"), wobei ein einzigerNULL-Wert das ganze Ergebnis zuNULLmacht. Nutze stattdessenconcat(). - Du hast doppelte Anführungszeichen um einen Textwert gesetzt (
"building" = "yes"), womit QGIS eine Spalte namensyessucht. Nutze einfache Anführungszeichen für Werte ("building" = 'yes'). - Du hast
$xoder$yauf einem Polygon- oder Linien-Layer genutzt.$xfunktioniert nur bei Punkten; nutzex(centroid($geometry))für Polygone.
Wie berechne ich die Fläche in Hektar im QGIS Feldrechner?
Setze den Output field type auf Decimal number (real), setze Precision auf 2 oder 3 und gib $area / 10000 ein (vorausgesetzt, die Flächeneinheit deines Projekts ist Quadratmeter und dein Projektellipsoid ist unter Project > Properties > General eingestellt). Um den gespeicherten Wert selbst auf 3 Nachkommastellen zu runden, nutze round($area / 10000, 3).
Wie aktualisiere ich im Feldrechner nur ausgewählte Objekte?
Wähle zuerst die Objekte auf der Karte oder in der Attributtabelle aus und öffne dann den Field Calculator (Ctrl+I). Das Kontrollkästchen Only update N selected feature(s) oben links ist dann automatisch angehakt. Wähle Update existing field, wähle die Spalte aus der Dropdown-Liste, gib deinen Ausdruck ein und klicke auf OK.
Erledigen Sie es in QGIS, indem Sie darum bitten
AI Agent führt die beschriebene Aufgabe in Ihrem eigenen QGIS-Projekt aus. Kostenlos, ohne Karte.
eine Spalte zu berechnen, öffnest du die Attributtabelle des Layers, klickst auf das Symbol des Field Calculator (Feldrechner, 

