Przejdź do treści
AI Agent
QGIS
Samouczek

Kalkulator rastra QGIS: sprawdzone formuły i 4 ciche pułapki

Opublikowano

Kalkulator rastra QGIS otworzysz z menu Raster > Raster Calculator (po polsku Raster > Kalkulator rastra) albo z Przybornika Processing. Dla NDVI z Sentinel-2 użyj ("B08@1" - "B04@1") / ("B08@1" + "B04@1"): kalkulator z menu sam liczy w Float32. Uważaj na kalkulator GDAL, który zawija liczby całkowite bez znaku, na maski z *, które zapisują 0 zamiast nodata, i na narzędzia nachylenia, które psują się na siatkach w stopniach.

Sprawdziłem to wszystko 7 listopada 2026 w QGIS 3.44.15 na oknie 5 km na 5 km pagórkowatych pól na południe od Machado, Minas Gerais, Brazylia (2,500 ha, 250,000 pikseli po 10 m w UTM 23S, EPSG:32723). Użyłem sceny Sentinel-2 L2A z 3 listopada 2026 i 30-metrowego DEM Copernicus GLO-30, a każdy wynik porównałem z 64-bitowym zmiennoprzecinkowym wzorcem w numpy poza QGIS.

Czym jest kalkulator rastra QGIS i który właściwie otwierasz?

Kalkulator rastra oblicza wyrażenie matematyczne lub logiczne piksel po pikselu na jednym lub kilku kanałach rastra i zapisuje nową siatkę. W QGIS kanał zapisujesz jako "layername@band" (na przykład "B08@1" to kanał 1 warstwy B08), łączysz kanały przez +, -, *, /, <, >, AND, OR lub if(condition, true, false) i zapisujesz wynik do GeoTIFF albo do wirtualnej warstwy w pamięci.

Kłopot w tym, że QGIS ma pięć narzędzi o nazwie "Raster calculator" i nie wszystkie działają na tym samym silniku. Cztery używają natywnego parsera wyrażeń QGIS i liczą zmiennoprzecinkowo. Narzędzie GDAL (pod spodem gdal_calc.py) używa zmiennych literowych A/B/C i oblicza wyrażenia numpy w typie danych kanału wejściowego.

Narzędzie w QGIS 3.44Składnia kanałuTyp wynikuPiksele z błędem > 0.01 w NDVI z uint16 (na 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 (w pamięci)0
Processing: Raster calculator (legacy) (qgis:rastercalculator)"B08@1"Float320
Processing: GDAL Raster calculator (gdal:rastercalculator)A, BPlik Float32, obliczenia w typie wejścia703 (0.28%, wartości do 126.7)

Jeśli chcesz po prostu formuły, która działa bez rzutowania typów, użyj Raster > Raster Calculator z górnego menu albo pierwszego Raster calculator w natywnej grupie QGIS w Processing.

Krok po kroku: obliczanie NDVI w kalkulatorze rastra QGIS

Jeśli najpierw potrzebujesz kanałów Sentinel-2, nasz poradnik o tym, jak pobrać zobrazowania Sentinel-2 w QGIS, opisuje drogę przez katalog STAC. Gdy kanały B04 (czerwony, 10 m) i B08 (bliska podczerwień, 10 m) są już w panelu Warstwy, obliczenie tego, co mierzy NDVI, zajmuje cztery kroki.

Zaznacz warstwę, która wyznacza siatkę wyniku

Kliknij B08 w panelu Warstwy przed otwarciem okna. Po otwarciu Raster > Raster Calculator zasięg wyniku, układ współrzędnych (CRS), szerokość i wysokość są brane z warstwy rastrowej zaznaczonej w tej chwili w panelu Warstwy. Sprawdź, czy nagłówek pokazuje Extent (current: B08).

Wpisz wyrażenie NDVI

W Raster > Raster Calculator kliknij dwukrotnie B08@1 i B04@1 na liście Raster Bands (albo wpisz je w cudzysłowach), aby zbudować:

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

Sprawdź, czy komunikat tuż pod polem wyrażenia brzmi Expression valid. W tym oknie nie musisz rzutować 16-bitowych kanałów Sentinel-2 bez znaku na float.

Wybierz plik wynikowy lub warstwę wirtualną

Ustaw Output layer na ścieżkę .tif i zostaw Output format na GeoTIFF. Jeśli chcesz tylko szybkiego podglądu bez pliku na dysku, zaznacz Create on-the-fly raster instead of writing layer to disk (zapisuje w pliku projektu URI formuły z bezwzględnymi ścieżkami do danych wejściowych i zgadza się z zapisanym plikiem do 3e-8).

Uruchom i nadaj styl wynikowi

Kliknij OK. Na naszym oknie 500 na 500 pikseli obliczenie trwało 0.12 sekundy, wartości wyszły od -0.5507 do 0.9547, a największa różnica względem 64-bitowego numpy to 2.98e-8. Otwórz Layer Properties > Symbology, przełącz na Singleband pseudocolor, wybierz rampę RdYlGn i ustaw min na 0, a max na 0.9.

Tak wygląda okno tuż przed kliknięciem OK, z zasięgiem pobranym z B08:

Okno Raster Calculator w QGIS z B04@1 i B08@1 na liście Raster Bands, wypełnioną ścieżką Output layer, Extent (current: B08) z 500 kolumnami i 500 wierszami w EPSG:32723 oraz formułą NDVI z komunikatem Expression valid.
Okno Raster > Raster Calculator bierze początkowy zasięg, CRS i wymiary pikseli z warstwy zaznaczonej w panelu Warstwy.

Po nadaniu stylu RdYlGn gęsta roślinność wokół Machado jest ciemnozielona, odkryta gleba i drogi są czerwone, a 703 piksele, w których czerwień przewyższa bliską podczerwień (woda i ciemne miejsca), mają wartości ujemne. Średnie NDVI w całym oknie wynosi 0.727. Jeśli roślinność jest tak gęsta, że NDVI się nasyca, albo między rzędami widać gołą glebę, zobacz, jak zmienia się formuła, w naszym porównaniu NDVI vs EVI, SAVI i NDRE.

Obszar mapy QGIS z rastrem NDVI pól wokół Machado 5 km na 5 km w stylu rampy czerwony-żółty-zielony od 0 do 0.9, z panelem Warstwy po lewej.
Wynik NDVI w Float32 nad Machado, styl od 0 (czerwony) do 0.9 (zielony). Każdy piksel zgadza się z zewnętrznym 64-bitowym wzorcem do 3e-8.

Zbiór formuł do kalkulatora rastra QGIS

Każde wyrażenie poniżej uruchomiłem w QGIS 3.44.15 (QgsRasterCalculator) na danych z Machado i sprawdziłem piksel po pikselu z numpy. Kopiuj składnię z cudzysłowami wokół "layer@band".

ZadanieSprawdzone wyrażenie (Raster > Raster Calculator)Wynik na oknie testowym Machado
NDVI (Sentinel-2 10 m)("B08@1" - "B04@1") / ("B08@1" + "B04@1")Float32 od -0.5507 do 0.9547 na 250,000 pikseli; maks. błąd 2.98e-8.
NDWI (wskaźnik wody McFeetersa)("B03@1" - "B08@1") / ("B03@1" + "B08@1")Float32; "ndwi@1" > 0 wydzielił 637 pikseli wody (6.4 ha stawów i strumieni).
Maska poniżej progu na nodata"ndvi@1" / ("ndvi@1" > 0.3)Dzieli przez 0 tam, gdzie warunek jest fałszywy, i zapisuje prawdziwe nodata (11,343 piksele wykluczone; średnia 0.753).
Warunkowa zamiana (if)if("ndvi@1" > 0.3, "ndvi@1", 0)Parsuje się i zachowuje wartości powyżej 0.3, ale w pozostałych miejscach zapisuje 0, jak maska z *.
Reklasyfikacja DEM na 5 klas (suma logiczna)("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) * 5Kody od 1 do 5 na 54,901 pikselach DEM; na każdym pikselu identycznie jak native:reclassifybytable.
Reklasyfikacja DEM na 5 klas (zagnieżdżone if)if("dem@1" < 800, 1, if("dem@1" < 850, 2, if("dem@1" < 900, 3, if("dem@1" < 1000, 4, 5))))Te same 5 klas (96.9 ha, 1,089.4 ha, 1,323.1 ha, 1,759.7 ha, 582.7 ha).
Próg nachylenia"slope@1" > 15Zapisuje 1 powyżej 15 stopni i 0 przy 15 i mniej (17,327 z 52,979 ważnych pikseli DEM w UTM, 32.61%).
Wysokość z metrów na stopy"dem@1" * 3.28084Maks. błąd 0.98 ft (0.026% przy 1,168 m), jeśli użyjesz 3.28 z podręcznika QGIS zamiast 3.28084.

Cztery ciche pułapki, które dają złe liczby (i jak je wykryć)

Żaden z czterech poniższych błędów nie wywołuje ostrzeżenia w QGIS. Każdy kończy się normalnie, dodaje warstwę do projektu i podaje liczby, które wyglądają wiarygodnie, dopóki ich nie sprawdzisz.

1. Kalkulator rastra GDAL zawija liczby całkowite bez znaku przy ujemnym NDVI

Natywny kalkulator rastra QGIS nigdy nie trafia na błąd dzielenia całkowitego na kanałach Sentinel-2, ale GDAL Raster calculator z Processing (gdal:rastercalculator) oblicza (A-B)/(A+B) w typie danych numpy pliku wejściowego i psuje każdy piksel, w którym czerwień jest wyższa niż NIR.

Kanały Sentinel-2 Level-2A są zapisane jako 16-bitowe liczby całkowite bez znaku (uint16). W naszym oknie 250,000 pikseli 703 piksele (0.28%, woda i ciemne miejsca) mają B04 większe niż B08. Gdy gdal:rastercalculator odejmuje B04 od B08 w uint16, ujemny wynik zawija się wokół 65,536, a narzędzie zapisuje te 703 piksele do pliku Float32 z wartościami od 0 do 126.7 zamiast ujemnego NDVI.

Mapa QGIS z wynikiem NDVI kalkulatora rastra GDAL na kanałach uint16, z pikselami w kolorze magenta oznaczającymi wartości powyżej 1 tam, gdzie czerwień przewyższa bliską podczerwień.
Kalkulator rastra GDAL na surowych kanałach uint16. Magenta oznacza wartości powyżej 1: piksele, które powinny być ujemne, zawinęły się wokół 65,536, do 126.7.

Jeśli używasz kalkulatora GDAL, albo rzutuj w wyrażeniu przez (A.astype(numpy.float32)-B)/(A+B) (w naszym teście liczba błędnych pikseli spadła do 0), albo użyj zamiast niego natywnego kalkulatora rastra QGIS. I nigdy nie ustawiaj typu wyniku GDAL na Int16 ani Byte dla wskaźnika: wymuszenie Int16 zaokrągliło 249,973 z naszych 250,000 pikseli (99.99%) do samych -1, 0 lub 1.

2. Mnożenie przez warunek (*) zapisuje 0, a nie nodata, i zaniża średnią

Mnożenie rastra przez warunek logiczny, taki jak ("ndvi@1" > 0.3) * "ndvi@1", ustawia każdy wykluczony piksel na 0 zamiast nodata, co obniżyło średnie NDVI zachowanego obszaru z 0.753 do 0.719.

Oficjalny podręcznik QGIS uczy ("elevation@1" >= 0) * "elevation@1" jako standardowego sposobu maskowania rastra. Na naszej warstwie NDVI z Machado 11,343 piksele mają wartość 0.3 lub niższą. Po pomnożeniu przez ("ndvi@1" > 0.3) wszystkie 11,343 piksele zostają zapisane jako prawidłowa liczba 0.0, więc statystyki warstwy nadal liczą wszystkie 250,000 pikseli i wliczają 11,343 zera do każdej średniej, histogramu i statystyki strefowej, które uruchomisz potem.

Wyrażenie maskiCzym stają się wykluczone pikselePiksele w statystykach warstwyŚrednie NDVI zachowanego obszaru
("ndvi@1" > 0.3) * "ndvi@1"0.0 (liczone jako dane)250,0000.719 (błąd -0.034)
"ndvi@1" / ("ndvi@1" > 0.3)nodata (-3.40282e+38)238,6570.753 (dokładnie)

Aby w jednym kroku zapisać prawdziwe nodata, dziel przez warunek zamiast mnożyć: "ndvi@1" / ("ndvi@1" > 0.3). Gdzie warunek jest prawdziwy (1), wartość się nie zmienia; gdzie jest fałszywy (0), dzielenie przez zero daje nodata.

3. Slope na DEM w stopniach przed kalkulatorem oznacza 100% mapy jako strome

Uruchomienie narzędzia Slope w QGIS z ustawieniami domyślnymi na DEM geograficznym (takim jak Copernicus GLO-30 w EPSG:4326) przed progiem "slope@1" > 15 oznaczyło 100% naszych pagórkowatych pól jako bardziej strome niż 15 stopni, ze średnim nachyleniem 89.99 stopnia, podczas gdy prawdziwa wartość po przeliczeniu do UTM to 32.61%.

Copernicus GLO-30 i inne darmowe globalne DEM (zobacz nasz poradnik o darmowych DEM do pobrania w QGIS) przychodzą w stopniach geograficznych (EPSG:4326) z wysokościami w metrach. Przy domyślnym współczynniku Z narzędzie Slope odczytuje przewyższenie w metrach względem kroku poziomego 0.000278 (szerokość piksela w stopniach), więc każde zbocze wygląda jak pionowy klif.

Jak policzono Slope przed "slope@1" > 15Piksele > 15 stopniŚrednie nachylenie
Natywny Slope na DEM w EPSG:4326, domyślny współczynnik Z 1100.00%89.99°
GDAL Slope na DEM w EPSG:4326, skala 1100.00%89.99°
GDAL Slope na DEM w EPSG:4326, skala 11112031.61%12.54°
Natywny Slope po przeliczeniu DEM do UTM 23S 30 m (wzorzec)32.61%12.68°
GDAL Slope po przeliczeniu DEM do UTM 23S 30 m32.71%12.71°

Nawet skrót ze skalą 111120 metrów na stopień zaniża wynik o cały punkt procentowy (31.61% wobec 32.61%), bo na 22°S stopień długości geograficznej jest o około 7% krótszy niż stopień szerokości (cos 22° = 0.93). Zawsze przeliczaj DEM do lokalnej strefy UTM (Raster > Projections > Warp (Reproject), próbkowanie dwuliniowe i wartość nodata -9999, żeby krawędź nie dawała fałszywych nachyleń 87°) przed uruchomieniem Slope i kalkulatora rastra.

4. Odjęcie offsetu +1000 Sentinel-2 bez sprawdzenia sceny psuje 90.6% pikseli

Odjęcie 1000 od naszych kanałów Sentinel-2 L2A przed obliczeniem NDVI wypchnęło 226,413 z 250,000 pikseli (90.6%) poza prawidłowy zakres [-1, 1], z wartościami od -1273 do 1217 i średnią 1.39 zamiast 0.727.

Od wersji przetwarzania (processing baseline) 04.00 ESA dodaje do Sentinel-2 offset +1000 w wartościach cyfrowych, żeby ciemne piksele nie obcinały się na zerze, a metadane STAC podają scale: 0.0001 i offset: -0.1. Ale gdy pobierasz Cloud-Optimized GeoTIFF z Earth Search STAC API (jak my dla sceny S2A_23KLR_20261103_0_L2A, baseline 05.13), dostawca już przesunął wartości i ustawia earthsearch:boa_offset_applied: true w metadanych elementu.

W naszym pliku B04 226,773 z 250,000 pikseli (90.7%) miało surowe wartości cyfrowe poniżej 1000 (minimum 59, mediana 491). Sprawdź minimalną wartość B04 w Layer Properties > Information, zanim dotkniesz formuły: jeśli ciemne piksele mają około 50 do 300, offset jest już usunięty, a surowe (B08 - B04) / (B08 + B04) jest dokładne (dzielenie przez współczynnik skali 10,000 znosi się w ilorazie). Odejmuj 1000 tylko wtedy, gdy najciemniejsze bezchmurne piksele mają wartości powyżej 1000.

Bonus: co naprawdę znaczą "Expression valid" i ogólny czerwony pasek błędu

Dwa inne zachowania Raster > Raster Calculator marnują dużo czasu na szukanie błędów:

  • Mieszane rozdzielczości na grubszej siatce nie są uśredniane. Gdy łączysz kanał 10 m (B08) z kanałem 20 m (B11), natywny kalkulator przepróbkowuje w locie metodą najbliższego sąsiada (kalkulator GDAL od razu przerywa z Error! Dimensions of file ... (250, 250) are different from other files (500, 500). Cannot proceed). Na siatce wynikowej 10 m powielenie każdego piksela 20 m na 2 na 2 działa poprawnie. Na siatce wynikowej 20 m kalkulator nie uśrednia czterech pikseli 10 m: w 62,250 z 62,500 komórek po prostu wziął prawy górny piksel 10 m z każdego bloku 2 na 2, różniąc się od średniej z 4 pikseli o maksymalnie 0.71 w (B08 - B11) / (B08 + B11).
  • "Expression valid" sprawdza tylko składnię, nie nazwy kanałów. Jeśli zostawisz operator na końcu, jak "B08@1" /, okno to wyłapie (Expression invalid, przycisk OK wyszarzony).
Okno Raster Calculator w QGIS z niedokończoną formułą zakończoną ukośnikiem, z komunikatem Expression invalid w lewym dolnym rogu i nieaktywnym przyciskiem OK.
Błąd składni od razu wyłącza przycisk OK.

Ale jeśli wpiszesz warstwę lub kanał, którego nie ma w projekcie (na przykład "B04@2" albo "B02@1", gdy B02 nie jest wczytany), etykieta nadal pokazuje Expression valid. Po kliknięciu OK QGIS zapisuje GeoTIFF 500 na 500 wypełniony w 100% wartością nodata, nic nie dodaje do mapy i pokazuje jeden czerwony pasek: Raster calculator: An error occurred while performing the calculation. Gdy tylko zobaczysz ten pasek, porównaj każdą nazwę "layer@band" z listą Raster Bands.

Czerwony pasek błędu u góry obszaru mapy QGIS z tekstem Raster calculator: An error occurred while performing the calculation.
Literówka w nazwie kanału przechodzi kontrolę składni, kończy się tym ogólnym paskiem i zostawia na dysku GeoTIFF wypełniony samym nodata.

Bez okna dialogowego: obliczenia rastrowe przez agenta AI w QGIS

Tworzymy AI Agent, więc ta sekcja dotyczy naszej własnej wtyczki. Dodaje ona w QGIS panel czatu, który przeszukuje katalogi STAC, przelicza DEM, wykonuje obliczenia rastrowe w Pythonie lub Processing i nadaje styl wynikowi na mapie.

Żeby sprawdzić, czy omija powyższe pułapki na dokładnie tych samych danych z Machado, narysowałem poligon farmy 120.07 ha (E 405300-406300, N 7594400-7595600 w UTM 23S) na pustym projekcie z OpenStreetMap i wysłałem trzy polecenia, każde w jednej wiadomości, z ustawieniami Medium effort i Balanced permissions, jeden nowy czat na zadanie.

Test 1: NDVI w 5 klasach z hektarami na klasę

Wpisałem:

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

Agent sprawdził katalog STAC, zauważył, że istnieje scena z 6 listopada 2026, ale mocno zachmurzona, i wybrał tę samą scenę z 3 listopada 2026 (1.65% zachmurzenia kafla), której użyłem w teście ręcznym. Pobrał B08 i B04 w 10 m, obliczył NDVI, podzielił je na pięć przedziałów, nadał styl warstwie i podał powierzchnię każdej klasy na metrycznej siatce 10 m.

Klasa NDVIRaport AI AgentMoja niezależna kontrola w numpy (te same 12,000 pikseli)Różnica
-1 do < 00.76 ha0.76 ha0.0%
0 do < 0.223.85 ha23.84 ha< 0.1%
0.2 do < 0.49.27 ha9.27 ha0.0%
0.4 do < 0.68.70 ha8.69 ha0.1%
0.6 do 177.42 ha77.44 ha< 0.1%
Łączna ważna powierzchnia120.00 ha120.00 ha (z poligonu 120.07 ha)0.0%

Piksel po pikselu na wyeksportowanym przez niego rastrze NDVI średnia różnica bezwzględna względem mojego wzorca wyniosła 5e-5, a jego raster klas różnił się od mojego na 4 pikselach z 12,000.

Interfejs QGIS z poligonem farmy 120 ha w pięciu klasach NDVI od czerwonej do ciemnozielonej, panelem Warstwy z hektarami na klasę i panelem AI Agent po prawej, który podaje źródło Sentinel-2 z 3 listopada 2026 i powierzchnie klas.
Jedna wiadomość: agent pominął zachmurzony przelot z 6 listopada, użył sceny z 3 listopada i zgodził się z naszymi powierzchniami wzorcowymi do 0.1%.

Test 2: Nachylenie powyżej 15 stopni (bez DEM w projekcie)

W nowym czacie, z wczytanym tylko poligonem farmy, wpisałem:

Show where slope is above 15 degrees on the farm layer

Agent pobrał 30-metrowy DEM Copernicus, przeliczył go na siatkę metryczną zamiast liczyć nachylenie w stopniach i nadał styl warstwie z dwiema klasami (15 degrees or less na jasnożółto, above 15 degrees na czerwono). Podał 331 z 1,320 pikseli farmy powyżej 15 stopni (25.08%, maks. 29.15°). Mój własny wzorzec z natywnego Slope po przeliczeniu do UTM na tym samym prostokącie dał 341 z 1,360 pikseli (25.07%, maks. 29.29°), czyli różnicę 0.01 punktu procentowego.

Mapa QGIS z poligonem farmy i nachyleniem powyżej 15 stopni w czerwonych komórkach na tle OpenStreetMap, z panelem czatu AI Agent po prawej, który podaje 331 z 1,320 pikseli farmy powyżej progu i maksimum 29.1 stopnia z 30-metrowego DEM Copernicus.
Agent przeliczył DEM Copernicus na siatkę metryczną przed progowaniem i zmieścił się w 0.01 punktu procentowego od naszego wzorca.

Test 3: Gdzie nadal trzeba sprawdzić agenta

W trzecim czacie zapytałem:

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

Zwróć uwagę, że tym razem nie napisałem "cloud-free" ani "latest". Agent ominął pułapkę maski z 0: dla każdego zamaskowanego piksela zapisał nodata -9999 i podał średnie NDVI 0.552 dla 2,277 zachowanych pikseli. Średnia jego pliku wynikowego wyniosła 0.5515; moja na tej samej scenie i regule 0.5513.

Pobrał jednak scenę Sentinel-2 z 27 października 2026, a tego dnia 80.5% farmy (9,656 z 12,000 pikseli w kanale Scene Classification) zakrywały chmury, cienie lub cirrusy. Podał datę w odpowiedzi, ale nie wspomniał, że 0.552 opisuje tylko czystą jedną piątą pola. Na bezchmurnej scenie z 3 listopada ta sama reguła daje średnią 0.766 dla 8,785 pikseli.

Moja zasada: niezależnie od tego, czy używasz kalkulatora rastra ręcznie, czy pytasz agenta z ekosystemu QGIS AI, zawsze sprawdzaj datę sceny i wczytuj warstwę w barwach naturalnych lub kanał chmur SCL, zanim zaufasz liczbie podsumowującej.

Jak to zmierzyliśmy. Wszystkie testy wykonano 7 listopada 2026 w QGIS 3.44.15-Solothurn na macOS (GDAL 3.13.3, numpy 2.5.2) na oknie 5 km na 5 km na południe od Machado, Minas Gerais, Brazylia (EPSG:32723, E 402000-407000, N 7591000-7596000), na scenie Sentinel-2 L2A S2A_23KLR_20261103_0_L2A (oraz scenie z 27 października 2026 w teście 3) z Earth Search i kaflu Copernicus GLO-30 S22_00_W046_00. Kryteria sukcesu testów ręcznych oraz testów agenta 1 i 2 spisano przed jakimkolwiek obliczeniem rastrowym; kryteria testu 3 spisano po zobaczeniu testów 1 i 2. Siatki wzorcowe policzono w 64-bitowym float w numpy poza QGIS. AI Agent 1.9.4 działał z ustawieniami Medium effort i Balanced permissions, jedna wiadomość na czat. Jedna scena i jedno miejsce to benchmark pojedynczego przypadku, a nie badanie statystyczne na różnych wersjach przetwarzania.

Najczęściej zadawane pytania

Dlaczego moje NDVI w QGIS ma same wartości 0, -1 lub 1?

Wymuszono całkowity typ wyniku (Int16 lub Byte) w kalkulatorze rastra GDAL, który zaokrągla każdą wartość dziesiętną między -1 a 1 do -1, 0 lub 1 (99.99% pikseli w naszym teście). Zostaw typ wyniku na Float32 albo użyj Raster > Raster Calculator z górnego menu, który sam zapisuje Float32.

Dlaczego kalkulator rastra QGIS kończy się błędem 'An error occurred while performing the calculation' i zapisuje nodata?

Nazwa "layer@band" w formule nie pasuje do wczytanej warstwy lub numeru kanału (na przykład wpisano "B04@2" dla pliku z jednym kanałem albo odwołano się do usuniętej warstwy). Komunikat Expression valid pod polem formuły sprawdza tylko składnię, a nie to, czy kanały istnieją. Wstaw każdy kanał ponownie, klikając go dwukrotnie na liście Raster Bands.

Czym różni się Raster > Raster Calculator od GDAL Raster Calculator w Processing?

Raster > Raster Calculator (i natywny Raster calculator w Processing) używa parsera QGIS z nazwami "layer@band" i zawsze liczy zmiennoprzecinkowo. GDAL Raster calculator (gdal_calc.py) używa zmiennych literowych (A, B) i oblicza wyrażenia numpy w typie danych kanału wejściowego, więc odejmowanie 16-bitowych kanałów całkowitych bez znaku zawija liczby ujemne wokół 65,536, chyba że rzutujesz przez A.astype(numpy.float32).

Jak zapisać warunek IF lub ustawić wartości na nodata w kalkulatorze rastra QGIS?

Możesz wpisać if("ndvi@1" > 0.3, "ndvi@1", 0), aby zastąpić wartości poniżej 0.3 przez 0. Jeśli chcesz, żeby wykluczone piksele stały się prawdziwym nodata i nie zaniżały średniej warstwy, dziel przez warunek: "ndvi@1" / ("ndvi@1" > 0.3). Gdzie warunek jest fałszywy (0), dzielenie przez zero zapisuje nodata.

Wypróbuj AI Agent za darmo

Zrób to w QGIS, po prostu o to prosząc

AI Agent wykonuje zadanie, które opiszesz, w Twoim własnym projekcie QGIS. Za darmo, bez karty.

Wypróbuj AI Agent za darmo
Napisane przezYvann Barbot
·18 min read