Zum Inhalt springen
AI Agent
QGIS
Tutorial

QGIS Raster Calculator (Rasterrechner): Getestete Formeln und 4 stille Fallen

Veröffentlicht am

Öffne den QGIS Raster Calculator über Raster > Raster Calculator (deutsche Oberfläche: Raster > Rasterrechner) oder über die Processing Toolbox. Für NDVI aus Sentinel-2 nimmst du ("B08@1" - "B04@1") / ("B08@1" + "B04@1"): Der Rechner im Menü rechnet automatisch in Float32. Achte auf drei Dinge: Der GDAL-Rechner lässt vorzeichenlose Ganzzahlen überlaufen, Masken mit * schreiben 0 statt nodata, und Hangneigungs-Werkzeuge versagen auf Rastern in Grad.

Ich habe all das am 7. November 2026 in QGIS 3.44.15 getestet, auf einem 5 km mal 5 km großen Ausschnitt hügeligen Ackerlands südlich von Machado, Minas Gerais, Brasilien (2.500 ha, 250.000 Pixel mit 10 m in UTM 23S, EPSG:32723). Ich habe eine Sentinel-2-L2A-Szene vom 3. November 2026 und ein 30-m-DEM Copernicus GLO-30 verwendet und jedes Ergebnis außerhalb von QGIS mit einer numpy-Referenz in 64-Bit-Gleitkomma verglichen.

Was ist der QGIS Raster Calculator, und welchen öffnest du gerade?

Ein Rasterrechner wertet einen mathematischen oder booleschen Ausdruck Pixel für Pixel über ein oder mehrere Rasterbänder aus und schreibt ein neues Raster. In QGIS sprichst du ein Band als "layername@band" an (zum Beispiel "B08@1" für Band 1 des Layers B08), kombinierst Bänder mit +, -, *, /, <, >, AND, OR oder if(condition, true, false) und schreibst das Ergebnis als GeoTIFF oder als virtuellen Layer in den Speicher.

Was viele stolpern lässt: QGIS bringt fünf Werkzeuge mit dem Namen "Raster calculator" mit, und nicht alle nutzen dieselbe Engine. Vier verwenden den nativen QGIS-Ausdrucksparser und rechnen in Gleitkomma. Das GDAL-Werkzeug (intern gdal_calc.py) arbeitet mit den Buchstabenvariablen A/B/C und wertet numpy-Ausdrücke im Datentyp des Eingabebands aus.

Werkzeug in QGIS 3.44Band-SyntaxAusgabetypPixel mit Abweichung > 0,01 bei uint16-NDVI (von 250.000)
Raster > Raster Calculator (QgsRasterCalculator)"B08@1"Float320
Processing: Raster calculator (native:rastercalc)"B08@1"Float320
Processing: Raster calculator (virtual) (native:virtualrastercalc)"B08@1"Float64 (im Speicher)0
Processing: Raster calculator (legacy) (qgis:rastercalculator)"B08@1"Float320
Processing: GDAL Raster calculator (gdal:rastercalculator)A, BFloat32-Datei, Rechnung im Eingabetyp703 (0,28 %, Werte bis 126,7)

Wenn du einfach eine Formel willst, die ohne Typumwandlung funktioniert, nimm Raster > Raster Calculator aus dem Hauptmenü oder den ersten Raster calculator in der nativen QGIS-Gruppe in Processing.

Schritt für Schritt: NDVI im QGIS Raster Calculator berechnen

Falls du zuerst Sentinel-2-Bänder brauchst, erklärt unser Leitfaden, wie du Sentinel-2-Bilder in QGIS herunterlädst, den Weg über den STAC-Katalog. Sobald die Bänder B04 (Rot, 10 m) und B08 (nahes Infrarot, 10 m) in deinem Layers-Panel liegen, brauchst du vier Schritte, um zu berechnen, was NDVI misst.

Wähle den Layer, der dein Ausgaberaster festlegt

Klicke im Layers-Panel auf B08, bevor du den Dialog öffnest. Beim Öffnen liest Raster > Raster Calculator Ausdehnung, Koordinatenbezugssystem (KBS), Breite und Höhe aus dem Rasterlayer, der gerade im Layers-Panel ausgewählt ist. Prüfe, dass oben Extent (current: B08) steht.

Gib den NDVI-Ausdruck ein

Doppelklicke in Raster > Raster Calculator auf B08@1 und B04@1 in der Liste Raster Bands (oder tippe sie mit doppelten Anführungszeichen), um Folgendes aufzubauen:

("B08@1" - "B04@1") / ("B08@1" + "B04@1")

Prüfe, dass der Hinweis direkt unter dem Ausdrucksfeld Expression valid lautet. In diesem Dialog musst du die vorzeichenlosen 16-Bit-Bänder von Sentinel-2 nicht in Gleitkomma umwandeln.

Wähle eine Ausgabedatei oder einen virtuellen Layer

Setze Output layer auf einen .tif-Pfad und lass Output format auf GeoTIFF. Wenn du nur eine schnelle Vorschau ohne Datei auf der Festplatte willst, aktiviere Create on-the-fly raster instead of writing layer to disk (das speichert eine Formel-URI mit absoluten Pfaden zu den Eingaben in der Projektdatei und stimmt bis auf 3e-8 mit der geschriebenen Datei überein).

Ausführen und das Ergebnis darstellen

Klicke auf OK. Auf unserem Ausschnitt von 500 mal 500 Pixeln war die Berechnung nach 0,12 Sekunden fertig, mit Werten von -0.5507 bis 0.9547 und einer maximalen Abweichung von 2.98e-8 gegenüber numpy in 64 Bit. Öffne Layer Properties > Symbology, wechsle zu Singleband pseudocolor, wähle den Farbverlauf RdYlGn und setze Minimum auf 0 und Maximum auf 0.9.

So sieht der Dialog direkt vor dem Klick auf OK aus, mit der Ausdehnung von B08:

Dialog QGIS Raster Calculator mit B04@1 und B08@1 in der Liste Raster Bands, ausgefülltem Pfad unter Output layer, Extent (current: B08) mit 500 Spalten und 500 Zeilen in EPSG:32723 und der NDVI-Formel mit dem Hinweis Expression valid.
Der Dialog Raster > Raster Calculator übernimmt Ausdehnung, KBS und Pixelmaße zunächst vom Layer, der im Layers-Panel ausgewählt ist.

Mit RdYlGn dargestellt erscheint dichte Vegetation rund um Machado dunkelgrün, offener Boden und Straßen rot, und die 703 Pixel, in denen Rot das nahe Infrarot übertrifft (Wasser und dunkle Stellen), werden negativ. Der mittlere NDVI über den ganzen Ausschnitt liegt bei 0.727. Wenn dein Bestand so dicht ist, dass NDVI sättigt, oder zwischen den Reihen offener Boden liegt, lies in unserem Vergleich NDVI vs EVI, SAVI und NDRE, wie sich die Formel ändert.

QGIS-Kartenansicht mit dem NDVI-Raster des 5 km mal 5 km großen Ackerlands bei Machado, dargestellt mit einem Rot-Gelb-Grün-Verlauf von 0 bis 0,9, links das Layers-Panel.
Das Float32-NDVI-Ergebnis über Machado, dargestellt von 0 (rot) bis 0,9 (grün). Jedes Pixel stimmt bis auf 3e-8 mit der externen 64-Bit-Referenz überein.

Formelsammlung für den QGIS Raster Calculator

Jeder Ausdruck unten lief in QGIS 3.44.15 (QgsRasterCalculator) auf dem Machado-Datensatz und wurde Pixel für Pixel mit numpy verglichen. Übernimm die Syntax mit doppelten Anführungszeichen um "layer@band".

AufgabeGetesteter Ausdruck (Raster > Raster Calculator)Ergebnis auf dem Machado-Testausschnitt
NDVI (Sentinel-2 10 m)("B08@1" - "B04@1") / ("B08@1" + "B04@1")Float32 von -0.5507 bis 0.9547 über 250.000 Pixel; maximaler Fehler 2.98e-8.
NDWI (Wasserindex nach McFeeters)("B03@1" - "B08@1") / ("B03@1" + "B08@1")Float32; "ndwi@1" > 0 isolierte 637 Wasserpixel (6,4 ha Teiche und Bäche).
Unter Schwellenwert auf nodata maskieren"ndvi@1" / ("ndvi@1" > 0.3)Teilt durch 0, wo die Bedingung falsch ist, und schreibt echtes nodata (11,343 Pixel ausgeschlossen; Mittelwert 0.753).
Bedingtes Ersetzen (if)if("ndvi@1" > 0.3, "ndvi@1", 0)Wird geparst und behält Werte über 0.3, schreibt aber sonst 0, wie die *-Maske.
DEM in 5 Klassen reklassifizieren (boolesche Summe)("dem@1" < 800) * 1 + ("dem@1" >= 800 AND "dem@1" < 850) * 2 + ("dem@1" >= 850 AND "dem@1" < 900) * 3 + ("dem@1" >= 900 AND "dem@1" < 1000) * 4 + ("dem@1" >= 1000) * 5Codes 1 bis 5 über 54.901 DEM-Pixel; auf jedem Pixel identisch mit native:reclassifybytable.
DEM in 5 Klassen reklassifizieren (verschachteltes if)if("dem@1" < 800, 1, if("dem@1" < 850, 2, if("dem@1" < 900, 3, if("dem@1" < 1000, 4, 5))))Dieselben 5 Klassen (96,9 ha, 1.089,4 ha, 1.323,1 ha, 1.759,7 ha, 582,7 ha).
Schwellenwert für Hangneigung"slope@1" > 15Schreibt 1 über 15 Grad und 0 bei 15 Grad oder darunter (17,327 von 52,979 gültigen UTM-DEM-Pixeln, 32,61 %).
Höhe von Metern in Fuß"dem@1" * 3.28084Maximaler Fehler 0.98 ft (0.026% bei 1.168 m), wenn du statt 3.28084 die 3.28 aus dem QGIS-Handbuch nimmst.

Vier stille Fallen, die falsche Werte liefern (und wie du sie erkennst)

Keiner der vier Fehler unten löst in QGIS eine Warnung aus. Jeder läuft durch, fügt deinem Projekt einen Layer hinzu und liefert Werte, die plausibel aussehen, bis du sie prüfst.

1. Der GDAL Raster Calculator lässt vorzeichenlose Ganzzahlen bei negativem NDVI überlaufen

Der native QGIS Raster Calculator stößt bei Sentinel-2-Bändern nie auf einen Fehler bei der Ganzzahldivision, aber der GDAL Raster calculator in Processing (gdal:rastercalculator) rechnet (A-B)/(A+B) im numpy-Datentyp der Eingabedatei und verfälscht jedes Pixel, in dem Rot höher ist als NIR.

Sentinel-2-Bänder der Stufe 2A werden als vorzeichenlose 16-Bit-Ganzzahlen (uint16) geliefert. In unserem Ausschnitt von 250.000 Pixeln haben 703 Pixel (0,28 %, Wasser und dunkle Stellen) einen größeren Wert in B04 als in B08. Wenn gdal:rastercalculator B04 in uint16 von B08 abzieht, läuft das negative Ergebnis um 65.536 über, und das Werkzeug schreibt diese 703 Pixel mit Werten zwischen 0 und 126.7 statt negativem NDVI in eine Float32-Datei.

QGIS-Karte mit dem NDVI-Ergebnis des GDAL Raster Calculator auf uint16-Bändern, magentafarbene Pixel markieren Werte über 1, wo Rot das nahe Infrarot übertrifft.
Der GDAL Raster Calculator auf rohen uint16-Bändern. Magenta markiert Werte über 1: Pixel, die negativ sein müssten, sind stattdessen um 65.536 übergelaufen, bis auf 126,7.

Wenn du den GDAL-Rechner verwendest, wandle im Ausdruck mit (A.astype(numpy.float32)-B)/(A+B) um (das brachte die falschen Pixel in unserem Test auf 0), oder nimm stattdessen den nativen QGIS Raster Calculator. Und setze den GDAL-Ausgabetyp bei einem Index nie auf Int16 oder Byte: Mit erzwungenem Int16 wurden 249.973 unserer 250.000 Pixel (99,99 %) auf nur -1, 0 oder 1 gerundet.

2. Multiplizieren mit einer Bedingung (*) schreibt 0 statt nodata und drückt deinen Mittelwert

Multiplizierst du ein Raster mit einer booleschen Bedingung wie ("ndvi@1" > 0.3) * "ndvi@1", wird jedes ausgeschlossene Pixel auf 0 statt auf nodata gesetzt. Das drückte den mittleren NDVI der behaltenen Fläche von 0.753 auf 0.719.

Das offizielle QGIS-Handbuch lehrt ("elevation@1" >= 0) * "elevation@1" als Standardweg, ein Raster zu maskieren. In unserem NDVI-Layer von Machado liegen 11,343 Pixel bei 0.3 oder darunter. Multiplizierst du mit ("ndvi@1" > 0.3), werden alle 11,343 Pixel als gültige Zahl 0.0 geschrieben. Die Layerstatistik zählt also weiter alle 250.000 Pixel und rechnet 11,343 Nullen in jeden Mittelwert, jedes Histogramm und jede Zonenstatistik ein, die du danach ausführst.

MaskenausdruckWas aus ausgeschlossenen Pixeln wirdIn der Layerstatistik gezählte PixelMittlerer NDVI der behaltenen Fläche
("ndvi@1" > 0.3) * "ndvi@1"0.0 (als Daten gezählt)250.0000.719 (Fehler -0.034)
"ndvi@1" / ("ndvi@1" > 0.3)nodata (-3.40282e+38)238.6570.753 (exakt)

Um in einem Schritt echtes nodata zu schreiben, teile durch die Bedingung, statt mit ihr zu multiplizieren: "ndvi@1" / ("ndvi@1" > 0.3). Wo die Bedingung wahr ist (1), bleibt der Wert unverändert; wo sie falsch ist (0), erzeugt die Division durch null nodata.

3. Slope auf einem DEM in Grad vor dem Rechner markiert 100 % deiner Karte als steil

Lief das QGIS-Werkzeug Slope mit Standardeinstellungen auf einem geografischen DEM (etwa Copernicus GLO-30 in EPSG:4326), bevor ich mit "slope@1" > 15 den Schwellenwert setzte, wurden 100 % unseres hügeligen Ackerlands als steiler als 15 Grad markiert, bei einer mittleren Neigung von 89.99 Grad. Der echte Wert nach dem Umprojizieren nach UTM liegt bei 32.61%.

Copernicus GLO-30 und andere freie globale DEMs (siehe unseren Leitfaden zu kostenlosen DEM-Downloads in QGIS) kommen in geografischen Grad (EPSG:4326) mit Höhen in Metern. Mit dem Standard-Z-Faktor liest das Werkzeug Slope einen Anstieg in Metern gegen einen horizontalen Schritt von 0.000278 (eine Pixelbreite in Grad), sodass jeder Hang wie eine senkrechte Klippe aussieht.

Wie Slope vor "slope@1" > 15 berechnet wurdePixel > 15 GradMittlere Neigung
Natives Slope auf DEM in EPSG:4326, Standard-Z-Faktor 1100.00%89.99°
GDAL Slope auf DEM in EPSG:4326, Maßstab 1100.00%89.99°
GDAL Slope auf DEM in EPSG:4326, Maßstab 11112031.61%12.54°
Natives Slope nach Umprojizieren des DEM nach UTM 23S 30 m (Referenz)32.61%12.68°
GDAL Slope nach Umprojizieren des DEM nach UTM 23S 30 m32.71%12.71°

Selbst die Abkürzung mit 111120 Metern pro Grad landet einen ganzen Prozentpunkt zu niedrig (31.61% gegen 32.61%), weil ein Längengrad bei 22° S etwa 7 % kürzer ist als ein Breitengrad (cos 22° = 0.93). Projiziere dein DEM immer in seine lokale UTM-Zone um (Raster > Projections > Warp (Reproject), bilineare Interpolation, und setze einen nodata-Wert von -9999, damit der Rand nicht mit falschen 87°-Neigungen ausfranst), bevor du Slope und den Raster Calculator ausführst.

4. Den Sentinel-2-Offset von +1000 abzuziehen, ohne die Szene zu prüfen, zerstört 90,6 % der Pixel

Als ich vor der NDVI-Berechnung 1000 von unseren Sentinel-2-L2A-Bändern abzog, landeten 226,413 von 250,000 Pixeln (90,6 %) außerhalb des gültigen Bereichs [-1, 1], mit Werten von -1273 bis 1217 und einem Mittelwert von 1.39 statt 0.727.

Mit der Sentinel-2-Prozessierungs-Baseline 04.00 hat die ESA einen Offset von +1000 auf die Digitalwerte eingeführt, damit dunkle Pixel nicht bei null abgeschnitten werden, und die STAC-Metadaten nennen scale: 0.0001 und offset: -0.1. Holst du aber Cloud-Optimized GeoTIFFs aus der Earth Search STAC API (wie wir für die Szene S2A_23KLR_20261103_0_L2A, Baseline 05.13), hat der Anbieter die Werte bereits verschoben und setzt earthsearch:boa_offset_applied: true in den Metadaten des Items.

In unserer B04-Datei hatten 226,773 von 250,000 Pixeln (90,7 %) rohe Digitalwerte unter 1000 (Minimum 59, Median 491). Prüfe den Minimalwert von B04 unter Layer Properties > Information, bevor du die Formel anfasst: Liegen dunkle Pixel bei etwa 50 bis 300, ist der Offset schon entfernt und das rohe (B08 - B04) / (B08 + B04) ist exakt (die Division durch den Skalierungsfaktor 10,000 kürzt sich im Verhältnis heraus). Zieh 1000 nur ab, wenn deine dunkelsten wolkenfreien Pixel über 1000 liegen.

Bonus: was "Expression valid" und der allgemeine rote Fehlerbalken wirklich bedeuten

Zwei weitere Verhaltensweisen von Raster > Raster Calculator kosten viel Zeit bei der Fehlersuche:

  • Gemischte Auflösungen auf einem groben Raster werden nicht gemittelt. Wenn du ein 10-m-Band (B08) und ein 20-m-Band (B11) kombinierst, resampelt der native Rechner direkt per nächstem Nachbarn (der GDAL-Rechner bricht sofort ab mit Error! Dimensions of file ... (250, 250) are different from other files (500, 500). Cannot proceed). Auf einem 10-m-Ausgaberaster funktioniert das saubere Wiederholen jedes 20-m-Pixels 2 mal 2. Auf einem 20-m-Ausgaberaster mittelt der Rechner die vier 10-m-Pixel nicht: In 62,250 von 62,500 Zellen nahm er einfach das obere rechte 10-m-Pixel jedes 2-mal-2-Blocks und wich bei (B08 - B11) / (B08 + B11) um bis zu 0.71 von einem Mittel aus 4 Pixeln ab.
  • "Expression valid" prüft nur die Syntax, nicht die Bandnamen. Wenn du einen Operator am Ende stehen lässt wie bei "B08@1" /, fängt der Dialog das ab (Expression invalid, OK ausgegraut).
Dialog QGIS Raster Calculator mit einer unvollständigen Formel, die auf einen Schrägstrich endet, unten links Expression invalid und die Schaltfläche OK deaktiviert.
Ein Syntaxfehler deaktiviert die Schaltfläche OK sofort.

Tippst du aber einen Layer oder ein Band, das nicht im Projekt ist (etwa "B04@2" oder "B02@1", wenn B02 nicht geladen ist), steht dort weiter Expression valid. Klickst du auf OK, schreibt QGIS ein GeoTIFF von 500 mal 500 Pixeln, das zu 100 % aus nodata besteht, fügt der Karte nichts hinzu und zeigt einen roten Balken: Raster calculator: An error occurred while performing the calculation. Wann immer du diesen Balken siehst, prüfe jeden "layer@band"-Namen gegen die Liste Raster Bands.

Roter Fehlerbalken oben in der QGIS-Kartenansicht mit dem Text Raster calculator: An error occurred while performing the calculation.
Ein Tippfehler im Bandnamen besteht die Syntaxprüfung, scheitert mit diesem allgemeinen Balken und hinterlässt ein GeoTIFF voller nodata auf der Festplatte.

Ohne Dialog: Rasterrechnung per Anfrage an einen KI-Agenten in QGIS

Wir entwickeln AI Agent, in diesem Abschnitt geht es also um unser eigenes Plugin. Es dockt ein Chat-Panel in QGIS an, das STAC-Kataloge durchsuchen, DEMs umprojizieren, Rasterrechnungen in Python oder Processing ausführen und das Ergebnis auf deiner Karte darstellen kann.

Um zu sehen, ob es die Fallen oben auf genau denselben Machado-Daten vermeidet, habe ich über einem leeren OpenStreetMap-Projekt ein Betriebspolygon von 120,07 ha gezeichnet (E 405300-406300, N 7594400-7595600 in UTM 23S) und drei Prompts mit je einer Nachricht geschickt, auf Medium effort und Balanced permissions, ein neuer Chat pro Aufgabe.

Test 1: NDVI in 5 Klassen mit Hektar pro Klasse

Ich habe getippt:

Compute NDVI for this field from the latest cloud-free Sentinel-2 and class it in 5 classes with hectares per class

Der Agent durchsuchte den STAC-Katalog, stellte fest, dass es eine Szene vom 6. November 2026 gab, die aber stark bewölkt war, und wählte dieselbe Szene vom 3. November 2026 (1.65% Wolkenbedeckung der Kachel), die ich für den manuellen Test genutzt hatte. Er holte B08 und B04 mit 10 m, berechnete NDVI, teilte es in fünf Intervalle ein, stellte den Layer dar und meldete die Fläche pro Klasse auf dem metrischen 10-m-Raster.

NDVI-KlasseBericht von AI AgentMeine unabhängige numpy-Prüfung (dieselben 12.000 Pixel)Abweichung
-1 bis < 00.76 ha0.76 ha0.0%
0 bis < 0.223.85 ha23.84 ha< 0.1%
0.2 bis < 0.49.27 ha9.27 ha0.0%
0.4 bis < 0.68.70 ha8.69 ha0.1%
0.6 bis 177.42 ha77.44 ha< 0.1%
Gültige Gesamtfläche120.00 ha120.00 ha (von 120.07 ha Polygon)0.0%

Pixel für Pixel auf seinem exportierten NDVI-Raster lag die mittlere absolute Abweichung gegenüber meiner Referenz bei 5e-5, und sein Klassenraster wich auf 4 von 12.000 Pixeln von meinem ab.

QGIS-Oberfläche mit dem 120-ha-Betriebspolygon in fünf NDVI-Klassen von Rot bis Dunkelgrün, im Layers-Panel die Hektarzahlen pro Klasse und rechts das AI-Agent-Panel mit der Sentinel-2-Quelle vom 3. November 2026 und den Klassenflächen.
Eine Nachricht: Der Agent übersprang den bewölkten Überflug vom 6. November, nahm die Szene vom 3. November und traf unsere Referenzflächen auf 0,1 % genau.

Test 2: Hangneigung über 15 Grad (ohne DEM im Projekt)

In einem neuen Chat, in dem nur das Betriebspolygon geladen war, habe ich getippt:

Show where slope is above 15 degrees on the farm layer

Der Agent holte das 30-m-DEM von Copernicus, projizierte es auf ein metrisches Raster um, statt die Neigung in Grad zu berechnen, und stellte einen Layer mit zwei Klassen dar (15 degrees or less in Blassgelb, above 15 degrees in Rot). Er meldete 331 von 1,320 Betriebspixeln über 15 Grad (25.08%, Maximum 29.15°). Meine eigene Referenz mit nativem Slope auf UTM-umprojiziertem DEM für dasselbe Rechteck ergab 341 von 1,360 Pixeln (25.07%, Maximum 29.29°), eine Abweichung von 0.01 Prozentpunkten.

QGIS-Karte des Betriebspolygons mit Hangneigung über 15 Grad in roten Zellen über OpenStreetMap, rechts das AI-Agent-Chat-Panel mit 331 von 1.320 Betriebspixeln über dem Schwellenwert und einem Maximum von 29,1 Grad aus dem 30-m-DEM von Copernicus.
Der Agent projizierte das Copernicus-DEM vor dem Schwellenwert auf ein metrisches Raster um und lag 0,01 Prozentpunkte neben unserer Referenz.

Test 3: Wo du den Agenten noch prüfen musst

In einem dritten Chat habe ich gefragt:

Mask out everything with NDVI below 0.3 on the farm layer and tell me the mean NDVI of what is left

Beachte, dass ich in diesem Prompt weder "cloud-free" noch "latest" geschrieben habe. Der Agent umging die 0-Maskenfalle: Er schrieb für jedes maskierte Pixel -9999 als nodata und gab einen mittleren NDVI von 0.552 über 2,277 behaltene Pixel zurück. Der Mittelwert seiner Ausgabedatei lag bei 0.5515; meiner auf derselben Szene mit derselben Regel bei 0.5513.

Allerdings nahm er die Sentinel-2-Szene vom 27. Oktober 2026, und an diesem Tag waren 80.5% des Betriebs (9,656 von 12,000 Pixeln im Scene Classification Band) von Wolken, Schatten oder Zirren bedeckt. Er nannte das Datum in seiner Antwort, erwähnte aber nie, dass 0.552 nur das wolkenfreie Fünftel des Feldes beschrieb. Auf der klaren Szene vom 3. November ergibt dieselbe Regel einen Mittelwert von 0.766 über 8.785 Pixel.

Meine Faustregel: Ob du den Raster Calculator von Hand bedienst oder einen Agenten aus dem QGIS-KI-Ökosystem fragst, prüfe immer das Datum der Szene und lade das Echtfarbbild oder das SCL-Wolkenband, bevor du einer zusammenfassenden Zahl vertraust.

So haben wir gemessen. Alle Tests liefen am 7. November 2026 in QGIS 3.44.15-Solothurn auf macOS (GDAL 3.13.3, numpy 2.5.2) über einem 5 km mal 5 km großen Ausschnitt südlich von Machado, Minas Gerais, Brasilien (EPSG:32723, E 402000-407000, N 7591000-7596000), mit der Sentinel-2-L2A-Szene S2A_23KLR_20261103_0_L2A (und der Szene vom 27. Oktober 2026 für Test 3) von Earth Search sowie der Copernicus-GLO-30-Kachel S22_00_W046_00. Die Erfolgskriterien für die manuellen Tests und die Agenten-Tests 1 und 2 wurden festgelegt, bevor irgendeine Rasterberechnung lief; die Kriterien für Test 3 erst nach Tests 1 und 2. Die Referenzraster wurden außerhalb von QGIS in numpy mit 64-Bit-Gleitkomma berechnet. AI Agent 1.9.4 lief auf Medium effort und Balanced permissions, eine Nachricht pro Chat. Eine Szene und ein Standort sind ein Einzelfall-Benchmark, keine statistische Erhebung über mehrere Baselines.

Häufig gestellte Fragen

Warum ist mein NDVI in QGIS überall 0, -1 oder 1?

Du hast im GDAL Raster Calculator einen Ganzzahl-Ausgabetyp erzwungen (Int16 oder Byte), der jede Dezimalzahl zwischen -1 und 1 auf -1, 0 oder 1 rundet (99,99 % der Pixel in unserem Test). Lass den Ausgabetyp auf Float32 oder nimm Raster > Raster Calculator aus dem Hauptmenü, das automatisch Float32 ausgibt.

Warum scheitert der QGIS Raster Calculator mit 'An error occurred while performing the calculation' und gibt nur nodata aus?

Ein "layer@band"-Name in deiner Formel passt zu keinem geladenen Layer oder keiner Bandnummer (zum Beispiel "B04@2" bei einer einbandigen Datei oder ein Layer, den du entfernt hast). Der Hinweis Expression valid unter dem Formelfeld prüft nur die Syntax, nicht, ob die Bänder existieren. Füge jedes Band neu ein, indem du es in der Liste Raster Bands doppelklickst.

Was ist der Unterschied zwischen Raster > Raster Calculator und dem GDAL Raster Calculator in Processing?

Raster > Raster Calculator (und der native Raster calculator in Processing) nutzt den eigenen Parser von QGIS mit "layer@band"-Namen und rechnet immer in Gleitkomma. Der GDAL Raster calculator (gdal_calc.py) nutzt Buchstabenvariablen (A, B) und rechnet in numpy im Datentyp des Eingabebands. Beim Subtrahieren vorzeichenloser 16-Bit-Ganzzahlbänder laufen negative Zahlen daher um 65,536 über, wenn du nicht mit A.astype(numpy.float32) umwandelst.

Wie schreibe ich eine IF-Bedingung oder setze Werte im QGIS Raster Calculator auf nodata?

Mit if("ndvi@1" > 0.3, "ndvi@1", 0) ersetzt du Werte unter 0.3 durch 0. Wenn ausgeschlossene Pixel echtes nodata werden sollen, damit sie deinen Layer-Mittelwert nicht drücken, teile stattdessen durch die Bedingung: "ndvi@1" / ("ndvi@1" > 0.3). Wo die Bedingung falsch ist (0), schreibt die Division durch null nodata.

AI Agent kostenlos testen

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.

AI Agent kostenlos testen
Geschrieben vonYvann Barbot
·19 min read