Que faire des valeurs de -3.4e + 38 nodata?

17

J'essaie de traiter certains fichiers raster bioclimatiques, tels que ceux qui peuvent être téléchargés à partir de http://www.worldclim.org/current (ensemble bioclim). Ils semblent avoir des valeurs nodata définies -3.4e+38selon QGIS (en regardant la sortie de gdalinfo, c'est -3.39999999999999996e+38).

Il semble que les outils gdal ne soient pas capables de gérer cette valeur nodata, et qgis ne semble pas non plus être capable de la reconnaître. Dans le style de calque, il existe une entrée pour -3.4e + 38 définie sur 100% transparent, mais elle affiche toujours ces valeurs, même si le sélecteur "Identifier les entités" les indique comme ayant la valeur -3.4e + 38.

J'ai essayé de créer un vrt pour convertir les valeurs de nodata à -9999 à la place, mais cela n'a pas fonctionné non plus.

Comment puis-je traiter ces fichiers pour avoir des valeurs de nodata utilisables?

valeurs de nodata récupérées dans le fichier définir la transparence n'a aucun effet

rudivonstaden
la source
Soi-disant dans la nouvelle version qgis a BEAUCOUP meilleur support de nodata. J'ai eu beaucoup de problèmes de "nodata" avec 1.8 (surtout quand j'essayais de calculer l'histogramme ou les moyennes dans une zone).
nickves

Réponses:

4

GDAL peut gérer ces valeurs. En fait, la valeur NoData par défaut de GDAL est à peu près la même que la vôtre. Je pense que le problème est une erreur en virgule flottante dans QGIS. J'ai le même problème avec les valeurs NoData à virgule flottante.

Si vous souhaitez modifier la valeur NoData à l'aide de GDAL, vous pouvez utiliser gdalwarp ou peut-être gdal_translate et définir la valeur nodata sur un entier à partir de là (-dstnodata et -a_nodata respectivement). Par inastance, j'ai réussi à définir ma valeur NoData à -999 dans un raster flottant 64 bits dans le passé. Cependant, étant donné que nous avons établi qu'il existe un problème de virgule flottante à cet égard, je ne voudrais pas garantir que cela fonctionnera dans tous les cas.

MappaGnosis
la source
Merci pour votre réponse, Sylvester. Je ne pouvais pas gdal_translate au travail en utilisant gdal_translate -a_nodata -9999 input.tif output.tifbien gdalwarp -dstnodata -9999 input.tif output.tiffait l'affaire. À partir d'un fichier d'entrée de 9 Mo, mon approche a abouti à un fichier de 26 Mo, tandis que gdalwarp a abouti à un fichier de sortie de 52 Mo. Cependant, si le raster contient des valeurs flottantes, mon approche ne fonctionnera pas où celle-ci le sera.
rudivonstaden
Avez-vous vérifié s'il existe un ticket ouvert dans l'outil de suivi des bogues QGIS pour cela?
underdark
1
Le gonflement des données peut être dû à l'utilisation d'une plus grande profondeur de pixels (63 bits contre 16 bits, par exemple) ou peut être simplement dû au fait que l'original est un JPEG et que votre nouveau résultat est un TIFF. @underdark - Désolé! Non, je n'ai pas vérifié s'il y a un ticket ouvert.
MappaGnosis
@underdark Je n'ai pas trouvé de ticket correspondant à cela, j'ai donc ajouté un rapport de bug ( hub.qgis.org/issues/6786 ).
rudivonstaden
1
Pour une taille de fichier plus petite, il vous suffit d'ajouter -co COMPRESS=LZW.
j08lue
11

J'ai réussi à trouver une solution à ce problème en convertissant le format de données en Int16 à partir de Float32. La valeur minimale est alors -32768 et peut être traitée comme une valeur nodata. La commande suivante a fait l'affaire:

gdal_translate -ot Int16 -a_nodata -32768 input.tif output.tif

Il y a probablement une meilleure solution, mais cela résout au moins mon problème immédiat.

nodata ramassé correctement

rudivonstaden
la source
0

vous pouvez essayer gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0

kmu2019
la source