Comment définir tous les pixels avec une valeur <= 0 à "nodata" dans le raster DEM?


28

J'ai un raster DEM avec des valeurs de pixels entre environ 3000 et -0,0003. J'ai besoin de définir tous les pixels avec une valeur de 0 et plus petit (<= 0) à "nodata" (pour les calculs raster ultérieurs et pour réduire la taille du fichier).

Il me semble que c'est une tâche pour la calculatrice raster (définir la valeur des pixels <= 0 à "nodata") ou une reclassification (définir la valeur des pixels <= 0 à "nodata" et conserver toutes les autres valeurs) mais je ne le fais pas savoir-faire.


J'ai également besoin de définir tous les pixels avec une valeur <0 à "nodata". Le post de vascobnunes ne m'aide donc pas.
MAP

Désolé, mais cela ne m'aide pas à changer le style d'affichage du raster. J'ai besoin de modifier physiquement mon fichier raster.
MAP

D'après les commentaires et les suggestions de clôture, il semble que vous devriez modifier votre question pour clarifier précisément ce que vous voulez et ce que vous avez déjà essayé.
PolyGeo

Réponses:


29

Je n'ai pas trouvé de solution à un seul outil, mais vous pouvez d'abord utiliser la calculatrice raster pour transformer toutes les valeurs en dessous d'un certain seuil à zéro, puis utiliser gdal_translate avec -a_nodata 0 pour transformer le 0 en nodata.

entrez la description de l'image ici

entrez la description de l'image ici


17

Voici les expressions mapcalc GRASS pour définir une plage sur NULL:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"

Super, ça marche pour moi!
ilFonta

16

Cela peut être fait en une seule étape dans QGIS dans la calculatrice raster.

Dans QGIS3, pour une couche raster nommée "x", utilisez l'expression suivante:

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

Cette astuce mappe les valeurs raster x> 0 dans le rapport x / 1 = x et les valeurs raster x <= 0 dans le rapport 0/0 = NaN. Ce NaN est rendu sous la forme FLOAT_MIN (aka -3.402832 ... e + 38) si le raster est un flottant de 4 octets.

Curieusement, cette question semble avoir été autour d'un certain temps, avec (pour autant que ma recherche rapide sur Google le montre aujourd'hui) la plupart des répondants disent que cela ne peut pas être fait en une seule étape. Il ne devrait certainement pas avoir besoin d'être piraté comme ça. La documentation QGIS pourrait aussi être meilleure.


10

Un grand merci à Dominik. Ma première réponse n'est pas correcte pour QGIS 2.8.3 (l'expression "myraster@1" > 0renvoie 0 ou 1 pour une entrée non nodata , pour une entrée nodata, elle renvoie nodata ).

L' expression QGIS Raster Calculator suivante devrait être suffisante (couche raster nommée "myraster"), car QGIS Raster Calculator définit tous les pixels qui ne remplissent pas la condition sur nodata :

("myraster @ 1"> 0) * "myraster @ 1"

La solution suivante est basée sur https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html et fonctionne pour QGIS 2.8.3 avec SAGA 2.1.2.

Dans QGIS Processing, utilisez la calculatrice SAGA Raster et entrez les éléments suivants dans Formula :

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

ou

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

Cela transformera toutes les valeurs inférieures ou égales à 0 en nodata (0/0).


cela ne fonctionne pas parce que les pixels qui ne remplissent pas la condition sont 0, pas nodata
Dominik

Super. Peut l'utiliser pour le filtre de valeur raster: Par exemple, filtre (0,5; 23]: ifelse (g1 <0,5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

Vous pouvez également enregistrer le calque (clic droit, enregistrer sous ...) et spécifier une plage de nodata. Cela conservera les nodata d'origine et créera de nouveaux nodatas pour la plage de valeurs spécifiée.


Ceci est la meilleure solution
Alexander

5

J'ai eu un problème similaire, mais j'avais LES DEUX valeurs que je voulais convertir en aucune donnée ET aucune valeur existante dans le raster.

Identifier les résultats

Je suis venu sur cette page pour obtenir de l'aide, mais je pense qu'il y a une mise en garde aux approches ici. Les méthodes de @underdark et @Micha ne semblent fonctionner que là où il n'y a pas de valeurs sans données dans le raster.

Pour contourner cela, vous devez convertir à la fois les valeurs sans données et les valeurs que vous souhaitez convertir en sans données en un nombre cohérent. Vous pouvez alors utiliser la deuxième étape de @underdark.

Pour ce faire, utilisez la boîte à outils de traitement> Reclassifier les valeurs de grille (SAGA) pour convertir simultanément les valeurs et les valeurs sans données en un nombre commun (par exemple, -999). Plus précisément, utilisez la méthode "plage" et spécifiez la plage. Puis, pour remplacer les valeurs sans données, choisissez cette même valeur (par exemple -999). Décochez remplacer les autres valeurs. Cela fonctionne aussi pour un changement de valeur unique ou des changements plus complexes.

Suivez ensuite la méthode de @underdark et enregistrez le raster à l'aide de Raster> Conversion> Traduire, et cochez no-data, en entrant la valeur que vous avez utilisée (par exemple -999).


-3

Cliquez avec le bouton droit sur le raster, accédez aux propriétés du raster, sélectionnez la troisième option "transparence", dans aucun onglet de valeur de données, ajoutez une valeur supplémentaire 0 et cliquez sur appliquer. Il s'agit de l'option similaire "afficher la valeur d'arrière-plan" dans arcgis.


4
Pas une bonne méthode. Vous ne modifiez pas réellement les données, donc si vous avez besoin de calculer des statistiques ou de faire une analyse, les résultats seront incorrects
khafen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.