Aller au contenu
AI Agent
QGIS
Tutoriel

Calculatrice raster QGIS : formules testées et 4 pièges silencieux

Publié le

Ouvrez la calculatrice raster de QGIS depuis Raster > Raster Calculator (Raster > Calculatrice Raster en français), ou depuis la boîte à outils de traitement. Pour le NDVI Sentinel-2, utilisez ("B08@1" - "B04@1") / ("B08@1" + "B04@1") : la calculatrice du menu calcule automatiquement en Float32. Attention à trois pièges : la calculatrice GDAL qui fait déborder les entiers non signés, les masques * qui écrivent 0 au lieu de nodata, et les outils de pente qui déraillent sur des grilles en degrés.

J’ai testé tout cela le 7 novembre 2026 dans QGIS 3.44.15, sur une fenêtre de 5 km sur 5 km de terres agricoles vallonnées au sud de Machado, dans le Minas Gerais, au Brésil (2 500 ha, 250 000 pixels de 10 m en UTM 23S, EPSG:32723). J’ai utilisé une scène Sentinel-2 L2A du 3 novembre 2026 et un MNT Copernicus GLO-30 à 30 m, et j’ai comparé chaque sortie à une référence numpy en virgule flottante 64 bits, calculée hors de QGIS.

Qu’est-ce que la calculatrice raster de QGIS, et laquelle ouvrez-vous ?

Une calculatrice raster évalue une expression mathématique ou booléenne pixel par pixel sur une ou plusieurs bandes raster, puis écrit une nouvelle grille. Dans QGIS, on désigne une bande par "layername@band" (par exemple "B08@1" pour la bande 1 de la couche B08), on combine les bandes avec +, -, *, /, <, >, AND, OR ou if(condition, true, false), et on écrit le résultat dans un GeoTIFF ou dans une couche virtuelle en mémoire.

Ce qui piège les gens, c’est que QGIS fournit cinq outils appelés « Raster calculator », et qu’ils ne tournent pas tous sur le même moteur. Quatre utilisent l’analyseur d’expressions natif de QGIS et calculent en virgule flottante. Celui de GDAL (gdal_calc.py en coulisses) utilise des variables lettres A/B/C et évalue des expressions numpy dans le type de données de la bande d’entrée.

Outil dans QGIS 3.44Syntaxe des bandesType de sortiePixels faux de plus de 0,01 sur un NDVI uint16 (sur 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 (en mémoire)0
Processing: Raster calculator (legacy) (qgis:rastercalculator)"B08@1"Float320
Processing: GDAL Raster calculator (gdal:rastercalculator)A, BFichier Float32, calcul dans le type d’entrée703 (0,28 %, valeurs jusqu’à 126,7)

Si vous voulez simplement une formule qui marche sans convertir les types, utilisez Raster > Raster Calculator dans le menu du haut, ou le premier Raster calculator du groupe natif QGIS dans la boîte à outils de traitement.

Pas à pas : calculer le NDVI dans la calculatrice raster de QGIS

S’il vous faut d’abord des bandes Sentinel-2, notre guide pour télécharger des images Sentinel-2 dans QGIS explique la méthode par le catalogue STAC. Une fois les bandes B04 (rouge, 10 m) et B08 (proche infrarouge, 10 m) dans le panneau Couches, calculer ce que mesure le NDVI prend quatre étapes.

Sélectionnez la couche qui fixe la grille de sortie

Cliquez sur B08 dans le panneau Couches avant d’ouvrir la fenêtre. À l’ouverture, Raster > Raster Calculator lit l’emprise, le système de coordonnées (SCR), la largeur et la hauteur de sortie sur la couche raster sélectionnée à ce moment dans le panneau Couches. Vérifiez que l’en-tête indique Extent (current: B08).

Saisissez l’expression NDVI

Dans Raster > Raster Calculator, double-cliquez sur B08@1 et B04@1 dans la liste Raster Bands (ou tapez-les entre guillemets doubles) pour construire :

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

Vérifiez que la mention juste sous la zone d’expression indique Expression valid. Dans cette fenêtre, inutile de convertir en flottant les bandes Sentinel-2 en entiers non signés 16 bits.

Choisissez un fichier de sortie ou une couche virtuelle

Indiquez un chemin .tif dans Output layer et laissez Output format sur GeoTIFF. Si vous voulez juste un aperçu rapide sans fichier sur le disque, cochez Create on-the-fly raster instead of writing layer to disk (cela enregistre dans le projet une URI de formule avec les chemins absolus des entrées, et le résultat correspond au fichier écrit à 3e-8 près).

Lancez le calcul et stylisez le résultat

Cliquez sur OK. Sur notre fenêtre de 500 sur 500 pixels, le calcul a pris 0,12 seconde, avec des valeurs de -0.5507 à 0.9547 et un écart maximal de 2.98e-8 par rapport à numpy 64 bits. Ouvrez Layer Properties > Symbology, passez en Singleband pseudocolor, choisissez la rampe RdYlGn, et réglez le minimum sur 0 et le maximum sur 0.9.

Voici la fenêtre juste avant de cliquer sur OK, avec l’emprise reprise de B08 :

Fenêtre Raster Calculator de QGIS avec B04@1 et B08@1 dans la liste Raster Bands, le chemin Output layer rempli, Extent (current: B08) avec 500 colonnes et 500 lignes en EPSG:32723, et la formule NDVI affichant Expression valid.
La fenêtre Raster > Raster Calculator prend son emprise initiale, son SCR et ses dimensions en pixels sur la couche sélectionnée dans le panneau Couches.

Une fois stylisé avec RdYlGn, la végétation dense autour de Machado apparaît en vert foncé, le sol nu et les routes en rouge, et les 703 pixels où le rouge dépasse le proche infrarouge (eau et zones sombres) passent en négatif. Le NDVI moyen sur toute la fenêtre est de 0.727. Si votre couvert est assez dense pour saturer le NDVI, ou laisse du sol nu entre les rangs, voyez comment la formule change dans notre comparaison NDVI, EVI, SAVI et NDRE.

Canevas de carte QGIS montrant le raster NDVI de 5 km sur 5 km des terres agricoles de Machado, stylisé avec une rampe Rouge-Jaune-Vert de 0 à 0,9, avec le panneau Couches à gauche.
La sortie NDVI en Float32 sur Machado, stylisée de 0 (rouge) à 0,9 (vert). Chaque pixel correspond à la référence externe 64 bits à 3e-8 près.

Recueil de formules pour la calculatrice raster de QGIS

Chaque expression ci-dessous a été lancée dans QGIS 3.44.15 (QgsRasterCalculator) sur le jeu de données de Machado et vérifiée pixel par pixel avec numpy. Recopiez la syntaxe avec les guillemets doubles autour de "layer@band".

TâcheExpression testée (Raster > Raster Calculator)Résultat sur la fenêtre test de Machado
NDVI (Sentinel-2 10 m)("B08@1" - "B04@1") / ("B08@1" + "B04@1")Float32 de -0.5507 à 0.9547 sur 250 000 pixels ; erreur max 2.98e-8.
NDWI (indice d’eau de McFeeters)("B03@1" - "B08@1") / ("B03@1" + "B08@1")Float32 ; "ndwi@1" > 0 a isolé 637 pixels d’eau (6,4 ha d’étangs et de ruisseaux).
Masquer sous un seuil en nodata"ndvi@1" / ("ndvi@1" > 0.3)Divise par 0 là où la condition est fausse, ce qui écrit un vrai nodata (11,343 pixels exclus ; moyenne 0.753).
Remplacement conditionnel (if)if("ndvi@1" > 0.3, "ndvi@1", 0)Passe l’analyse et garde les valeurs au-dessus de 0.3, mais écrit 0 ailleurs, comme le masque *.
Reclasser un MNT en 5 classes (somme booléenne)("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 à 5 sur 54 901 pixels du MNT ; identique sur chaque pixel à native:reclassifybytable.
Reclasser un MNT en 5 classes (if imbriqués)if("dem@1" < 800, 1, if("dem@1" < 850, 2, if("dem@1" < 900, 3, if("dem@1" < 1000, 4, 5))))Les mêmes 5 classes (96,9 ha, 1 089,4 ha, 1 323,1 ha, 1 759,7 ha, 582,7 ha).
Seuil de pente"slope@1" > 15Écrit 1 au-dessus de 15 degrés et 0 à 15 ou moins (17,327 sur 52,979 pixels valides du MNT en UTM, 32,61 %).
Altitude de mètres en pieds"dem@1" * 3.28084Erreur max de 0.98 ft (0.026% à 1 168 m) si vous prenez le 3.28 du manuel QGIS au lieu de 3.28084.

Quatre pièges silencieux qui donnent de faux chiffres (et comment les repérer)

Aucun des quatre échecs ci-dessous ne déclenche d’avertissement dans QGIS. Chacun va jusqu’au bout, ajoute une couche à votre projet et vous livre des chiffres qui semblent plausibles tant que vous ne les vérifiez pas.

1. La calculatrice raster GDAL fait déborder les entiers non signés sur les NDVI négatifs

La calculatrice raster native de QGIS ne tombe jamais sur un bug de division entière avec les bandes Sentinel-2, mais la GDAL Raster calculator de la boîte à outils de traitement (gdal:rastercalculator) évalue (A-B)/(A+B) dans le type de données numpy du fichier d’entrée, et corrompt chaque pixel où le rouge dépasse le proche infrarouge.

Les bandes Sentinel-2 de niveau 2A sont livrées en entiers non signés 16 bits (uint16). Dans notre fenêtre de 250 000 pixels, 703 pixels (0,28 %, eau et zones sombres) ont un B04 plus grand que B08. Quand gdal:rastercalculator soustrait B04 de B08 en uint16, le résultat négatif repart de 65 536, et l’outil écrit ces 703 pixels dans un fichier Float32 avec des valeurs entre 0 et 126.7 au lieu d’un NDVI négatif.

Carte QGIS montrant la sortie NDVI de la calculatrice raster GDAL sur des bandes uint16, avec des pixels magenta marquant les valeurs supérieures à 1 là où le rouge dépasse le proche infrarouge.
La calculatrice raster GDAL sur des bandes uint16 brutes. Le magenta marque les valeurs supérieures à 1 : des pixels qui devraient être négatifs sont repartis de 65 536, jusqu’à 126,7.

Si vous utilisez la calculatrice GDAL, convertissez dans l’expression avec (A.astype(numpy.float32)-B)/(A+B) (ce qui a ramené les pixels faux à 0 dans notre test), ou utilisez plutôt la calculatrice raster native de QGIS. Et ne réglez jamais le type de sortie GDAL sur Int16 ou Byte pour un indice : forcer Int16 a arrondi 249 973 de nos 250 000 pixels (99,99 %) à seulement -1, 0 ou 1.

2. Multiplier par une condition (*) écrit 0, pas nodata, et tire votre moyenne vers le bas

Multiplier un raster par une condition booléenne comme ("ndvi@1" > 0.3) * "ndvi@1" met chaque pixel exclu à 0 au lieu de nodata, ce qui a fait baisser le NDVI moyen de la zone conservée de 0.753 à 0.719.

Le manuel officiel de QGIS enseigne ("elevation@1" >= 0) * "elevation@1" comme méthode standard pour masquer un raster. Sur notre couche NDVI de Machado, 11,343 pixels sont à 0.3 ou moins. Quand vous multipliez par ("ndvi@1" > 0.3), ces 11,343 pixels sont tous écrits avec la valeur valide 0.0, si bien que les statistiques de la couche comptent toujours les 250 000 pixels et incluent 11,343 zéros dans chaque moyenne, histogramme et statistique zonale que vous lancerez ensuite.

Expression de masqueCe que deviennent les pixels exclusPixels comptés dans les statistiquesNDVI moyen de la zone conservée
("ndvi@1" > 0.3) * "ndvi@1"0.0 (compté comme donnée)250 0000.719 (erreur de -0.034)
"ndvi@1" / ("ndvi@1" > 0.3)nodata (-3.40282e+38)238 6570.753 (exact)

Pour écrire un vrai nodata en une seule étape, divisez par la condition au lieu de multiplier : "ndvi@1" / ("ndvi@1" > 0.3). Là où la condition est vraie (1), la valeur reste inchangée ; là où elle est fausse (0), la division par zéro produit nodata.

3. Calculer la pente sur un MNT en degrés avant la calculatrice classe 100 % de la carte en pente forte

Lancer l’outil Slope de QGIS avec ses réglages par défaut sur un MNT géographique (comme Copernicus GLO-30 en EPSG:4326) avant de seuiller "slope@1" > 15 a classé 100 % de nos terres vallonnées comme plus raides que 15 degrés, avec une pente moyenne de 89.99 degrés, alors que le vrai chiffre après reprojection en UTM est de 32.61%.

Copernicus GLO-30 et les autres MNT mondiaux gratuits (voir notre guide sur les téléchargements de MNT gratuits dans QGIS) arrivent en degrés géographiques (EPSG:4326) avec des altitudes en mètres. Avec le facteur Z par défaut, l’outil Slope lit une dénivelée en mètres face à un pas horizontal de 0.000278 (la largeur d’un pixel en degrés), si bien que chaque versant ressemble à une falaise verticale.

Méthode de calcul de la pente avant "slope@1" > 15Pixels > 15 degrésPente moyenne
Slope natif sur un MNT en EPSG:4326, facteur Z par défaut 1100.00%89.99°
Slope GDAL sur un MNT en EPSG:4326, échelle 1100.00%89.99°
Slope GDAL sur un MNT en EPSG:4326, échelle 11112031.61%12.54°
Slope natif après reprojection du MNT en UTM 23S 30 m (référence)32.61%12.68°
Slope GDAL après reprojection du MNT en UTM 23S 30 m32.71%12.71°

Même le raccourci d’échelle à 111120 mètres par degré tombe un point entier trop bas (31.61% contre 32.61%), car à 22°S un degré de longitude est environ 7 % plus court qu’un degré de latitude (cos 22° = 0.93). Reprojetez toujours votre MNT dans sa zone UTM locale (Raster > Projections > Warp (Reproject), rééchantillonnage bilinéaire, et une valeur nodata de -9999 pour que le bord ne produise pas de fausses pentes à 87°) avant de lancer Slope et la calculatrice raster.

4. Soustraire le décalage Sentinel-2 de +1000 sans vérifier la scène fausse 90,6 % des pixels

Soustraire 1000 de nos bandes Sentinel-2 L2A avant de calculer le NDVI a poussé 226,413 pixels sur 250,000 (90,6 %) hors de la plage valide [-1, 1], avec des valeurs de -1273 à 1217 et une moyenne de 1.39 au lieu de 0.727.

La ligne de traitement Sentinel-2 04.00 de l’ESA et les suivantes ont ajouté un décalage de +1000 sur les comptes numériques pour que les pixels sombres ne soient pas écrêtés à zéro, et les métadonnées STAC indiquent scale: 0.0001 et offset: -0.1. Mais quand vous récupérez des Cloud-Optimized GeoTIFF depuis l’API STAC d’Earth Search (comme nous l’avons fait pour la scène S2A_23KLR_20261103_0_L2A, ligne de traitement 05.13), le fournisseur a déjà décalé les valeurs et indique earthsearch:boa_offset_applied: true dans les métadonnées de l’item.

Dans notre fichier B04, 226,773 pixels sur 250,000 (90,7 %) avaient des comptes numériques bruts inférieurs à 1000 (minimum 59, médiane 491). Vérifiez la valeur minimale de B04 dans Layer Properties > Information avant de toucher à la formule : si les pixels sombres tournent autour de 50 à 300, le décalage est déjà retiré et la formule brute (B08 - B04) / (B08 + B04) est exacte (la division par le facteur d’échelle 10,000 s’annule dans le rapport). Ne soustrayez 1000 que si vos pixels les plus sombres par ciel clair sont au-dessus de 1000.

Bonus : ce que veulent vraiment dire « Expression valid » et la barre d’erreur rouge générique

Deux autres comportements de Raster > Raster Calculator font perdre beaucoup de temps au débogage :

  • Des résolutions mélangées sur une grille grossière ne sont pas moyennées. Quand vous combinez une bande à 10 m (B08) et une bande à 20 m (B11), la calculatrice native rééchantillonne à la volée au plus proche voisin (la calculatrice GDAL s’arrête aussitôt avec Error! Dimensions of file ... (250, 250) are different from other files (500, 500). Cannot proceed). Sur une grille de sortie à 10 m, répéter chaque pixel de 20 m en 2 sur 2 fonctionne proprement. Sur une grille de sortie à 20 m, la calculatrice ne fait pas la moyenne des quatre pixels de 10 m : dans 62,250 cellules sur 62,500, elle a simplement pris le pixel de 10 m en haut à droite de chaque bloc de 2 sur 2, avec un écart allant jusqu’à 0.71 par rapport à la moyenne des 4 pixels dans (B08 - B11) / (B08 + B11).
  • « Expression valid » ne vérifie que la syntaxe, pas les noms de bandes. Si vous laissez un opérateur en fin de formule, comme "B08@1" /, la fenêtre le repère (Expression invalid, bouton OK grisé).
Fenêtre Raster Calculator de QGIS avec une formule incomplète terminée par une barre oblique, affichant Expression invalid en bas à gauche et le bouton OK désactivé.
Une erreur de syntaxe désactive aussitôt le bouton OK.

Mais si vous tapez une couche ou une bande absente du projet (comme "B04@2", ou "B02@1" quand B02 n’est pas chargée), le libellé indique toujours Expression valid. Quand vous cliquez sur OK, QGIS écrit un GeoTIFF de 500 sur 500 rempli à 100 % de nodata, n’ajoute rien à la carte et affiche une seule bannière rouge : Raster calculator: An error occurred while performing the calculation. Chaque fois que vous voyez cette bannière, comparez chaque nom "layer@band" à la liste Raster Bands.

Barre d’erreur rouge en haut du canevas de carte QGIS indiquant Raster calculator: An error occurred while performing the calculation.
Une faute de frappe dans un nom de bande passe le contrôle de syntaxe, échoue avec cette barre générique et laisse sur le disque un GeoTIFF entièrement en nodata.

Se passer de la fenêtre : faire ses calculs raster en le demandant à un agent IA dans QGIS

Nous développons AI Agent, donc cette section parle de notre propre plugin. Il ajoute dans QGIS un panneau de discussion qui peut chercher dans des catalogues STAC, reprojeter des MNT, faire des calculs raster en Python ou via la boîte à outils de traitement, et styliser le résultat sur votre carte.

Pour voir s’il évite les pièges ci-dessus sur exactement les mêmes données de Machado, j’ai dessiné un polygone de ferme de 120,07 ha (E 405300-406300, N 7594400-7595600 en UTM 23S) sur un projet OpenStreetMap vide, et envoyé trois demandes en un seul message chacune, en effort Medium et permissions Balanced, avec une nouvelle discussion par tâche.

Test 1 : NDVI en 5 classes avec les hectares par classe

J’ai tapé :

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

L’agent a consulté le catalogue STAC, a noté qu’une scène du 6 novembre 2026 existait mais était très nuageuse, et a choisi la même scène du 3 novembre 2026 (1.65% de couverture nuageuse sur la tuile) que celle de mon test manuel. Il a récupéré B08 et B04 à 10 m, calculé le NDVI, l’a classé en cinq intervalles, a stylisé la couche et a donné la surface de chaque classe sur la grille métrique à 10 m.

Classe NDVIRésultat d’AI AgentMa vérification numpy indépendante (les mêmes 12 000 pixels)Écart
-1 à < 00.76 ha0.76 ha0.0%
0 à < 0.223.85 ha23.84 ha< 0.1%
0.2 à < 0.49.27 ha9.27 ha0.0%
0.4 à < 0.68.70 ha8.69 ha0.1%
0.6 à 177.42 ha77.44 ha< 0.1%
Surface valide totale120.00 ha120.00 ha (sur un polygone de 120.07 ha)0.0%

Pixel par pixel sur le raster NDVI qu’il a exporté, l’écart absolu moyen avec ma référence était de 5e-5, et son raster de classes différait du mien sur 4 pixels sur 12 000.

Interface QGIS montrant le polygone de ferme de 120 ha stylisé en cinq classes NDVI du rouge au vert foncé, avec le panneau Couches indiquant les hectares par classe et le panneau AI Agent à droite listant la source Sentinel-2 du 3 novembre 2026 et les surfaces par classe.
Un seul message : l’agent a écarté le passage nuageux du 6 novembre, a pris la scène du 3 novembre et a retrouvé nos surfaces de référence à 0,1 % près.

Test 2 : pente au-dessus de 15 degrés (sans MNT dans le projet)

Dans une nouvelle discussion, avec seulement le polygone de la ferme chargé, j’ai tapé :

Show where slope is above 15 degrees on the farm layer

L’agent a récupéré le MNT Copernicus à 30 m, l’a reprojeté sur une grille métrique au lieu de calculer la pente en degrés, et a stylisé une couche en deux classes (15 degrees or less en jaune pâle, above 15 degrees en rouge). Il a trouvé 331 pixels de la ferme sur 1,320 au-dessus de 15 degrés (25.08%, max 29.15°). Ma propre référence Slope native, sur un MNT reprojeté en UTM et le même rectangle, a donné 341 pixels sur 1,360 (25.07%, max 29.29°), soit un écart de 0.01 point de pourcentage.

Carte QGIS du polygone de ferme montrant en cellules rouges les pentes au-dessus de 15 degrés sur fond OpenStreetMap, avec le panneau de discussion AI Agent à droite indiquant 331 pixels de la ferme sur 1 320 au-dessus du seuil et un maximum de 29,1 degrés d’après le MNT Copernicus à 30 m.
L’agent a reprojeté le MNT Copernicus sur une grille métrique avant de seuiller, et tombe à 0,01 point de pourcentage de notre référence.

Test 3 : là où il faut encore vérifier l’agent

Dans une troisième discussion, j’ai demandé :

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

Notez que je n’ai écrit ni « cloud-free » ni « latest » dans cette demande. L’agent a évité le piège du masque à 0 : il a écrit un nodata -9999 pour chaque pixel masqué et a donné un NDVI moyen de 0.552 sur 2,277 pixels conservés. La moyenne de son fichier de sortie était de 0.5515 ; la mienne, sur la même scène avec la même règle, de 0.5513.

En revanche, il a pris la scène Sentinel-2 du 27 octobre 2026, et ce jour-là 80.5% de la ferme (9,656 pixels sur 12,000 dans la bande Scene Classification) était couvert de nuages, d’ombres ou de cirrus. Il a cité la date dans sa réponse, mais n’a jamais signalé que 0.552 ne décrivait que le cinquième dégagé de la parcelle. Sur la scène dégagée du 3 novembre, la même règle donne une moyenne de 0.766 sur 8 785 pixels.

Ma règle : que vous lanciez la calculatrice raster à la main ou que vous le demandiez à un agent de l’écosystème IA de QGIS, vérifiez toujours la date de la scène et chargez la bande en couleurs naturelles ou la bande nuages SCL avant de vous fier à un chiffre de synthèse.

Comment nous avons mesuré. Tous les tests ont eu lieu le 7 novembre 2026 dans QGIS 3.44.15-Solothurn sous macOS (GDAL 3.13.3, numpy 2.5.2), sur une fenêtre de 5 km sur 5 km au sud de Machado, dans le Minas Gerais, au Brésil (EPSG:32723, E 402000-407000, N 7591000-7596000), avec la scène Sentinel-2 L2A S2A_23KLR_20261103_0_L2A (et la scène du 27 octobre 2026 pour le test 3) d’Earth Search, et la tuile Copernicus GLO-30 S22_00_W046_00. Les critères de réussite des tests manuels et des tests 1 et 2 d’AI Agent ont été écrits avant tout calcul raster ; ceux du test 3 ont été écrits après avoir vu les tests 1 et 2. Les grilles de référence ont été calculées avec numpy en flottant 64 bits, hors de QGIS. AI Agent 1.9.4 tournait en effort Medium et permissions Balanced, un message par discussion. Une scène et un site forment un banc d’essai sur un seul cas, pas une étude statistique sur plusieurs lignes de traitement.

Questions fréquentes

Pourquoi mon NDVI ne vaut que 0, -1 ou 1 dans QGIS ?

Vous avez forcé un type de sortie entier (Int16 ou Byte) dans la calculatrice raster GDAL, ce qui arrondit chaque décimale entre -1 et 1 à -1, 0 ou 1 (99,99 % des pixels dans notre test). Laissez le type de sortie sur Float32, ou utilisez Raster > Raster Calculator dans le menu du haut, qui sort automatiquement du Float32.

Pourquoi la calculatrice raster de QGIS échoue-t-elle avec « An error occurred while performing the calculation » et ne produit que du nodata ?

Un nom "layer@band" de votre formule ne correspond à aucune couche chargée ou à aucun numéro de bande (par exemple "B04@2" sur un fichier à une seule bande, ou une couche que vous avez retirée). La mention Expression valid sous la zone de formule ne vérifie que la syntaxe, pas l’existence des bandes. Réinsérez chaque bande en double-cliquant dessus dans la liste Raster Bands.

Quelle différence entre Raster > Raster Calculator et la calculatrice raster GDAL de la boîte à outils de traitement ?

Raster > Raster Calculator (et le Raster calculator natif de la boîte à outils de traitement) utilise l’analyseur propre à QGIS avec des noms "layer@band" et calcule toujours en virgule flottante. La GDAL Raster calculator (gdal_calc.py) utilise des variables lettres (A, B) et évalue les calculs numpy dans le type de données de la bande d’entrée : soustraire des bandes en entiers non signés 16 bits fait donc repartir les nombres négatifs de 65,536, sauf si vous convertissez avec A.astype(numpy.float32).

Comment écrire une condition IF ou mettre des valeurs en nodata dans la calculatrice raster de QGIS ?

Vous pouvez écrire if("ndvi@1" > 0.3, "ndvi@1", 0) pour remplacer par 0 les valeurs inférieures à 0.3. Si vous voulez que les pixels exclus deviennent un vrai nodata pour qu’ils ne fassent pas baisser la moyenne de la couche, divisez plutôt par la condition : "ndvi@1" / ("ndvi@1" > 0.3). Là où la condition est fausse (0), la division par zéro écrit nodata.

Essayer AI Agent gratuitement

Faites-le dans QGIS en le demandant

AI Agent réalise la tâche que vous décrivez, dans votre propre projet QGIS. Gratuit, sans carte bancaire.

Essayer AI Agent gratuitement