Reclassifier le raster à l'aide de GDAL?


10

Je recherche un outil du GDAL capable de reclasser un raster contenant plusieurs valeurs discrètes. Jusqu'à présent, j'ai trouvé des rasters Reclassify utilisant GDAL et Python ; cependant, il semble que seules des valeurs uniques puissent être traitées ici.

Existe-t-il quelque chose comme un outil natif de la suite?

Réponses:


8

gdal_calc peut être utilisé pour une reclassification de nombreuses classes.

Par exemple, vous pouvez modifier les valeurs inférieures (et égales) de 12 à 10, les valeurs de 20, 30, 40, 50 restent les mêmes et les valeurs situées au-dessus de 50 et 62 sont remplacées par 60:

  python gdal_calc.py -A input.tif --outfile=output.file --calc="10*(A<=12)+20*(A==20)+30*(A==30)+40*(A==40)+50*(A==50)+60*((A>50)*(A<=62))" --NoDataValue=0

Notez que la documentation GDAL ( gdal.org/gdal_calc.html ) implique que gdal_calc.py fonctionnera avec plusieurs rasters, puisque vous pouvez choisir n'importe quelle lettre majuscule de l'alphabet. Je n'ai pas réussi à le faire fonctionner avec plus de deux entrées à la fois. Il a accepté plus d'entrées sans produire d'erreur, mais mes tests ont montré que seuls les deux premiers étaient utilisés.
David A

7

gdal_reclassify est un outil Python non officiel, basé sur des liaisons Python GDAL, capable de reclasser selon plusieurs classes de valeurs.

Exigences:

python
numpy
gdal binaries
python-gdal bindings

Exemple:

python gdal_reclassify.py source_dataset.tif destination_dataset.tif -c "<30, <50, <80, ==130, <210" -r "1, 2, 3, 4, 5" -d 0 -n true -p "COMPRESS=LZW"

3

Si vous travaillez dans un script python, utilisez la .ReadAsArrayméthode. Vous pouvez ensuite reclasser en utilisant numpy.

import numpy as np
sample = np.random.randint(low = 0, high = 9, size =(5,5))
print(sample)
sample[sample == 4] = 40
sample[sample <= 2] = -20
print(sample)

1
L'inconvénient est que l'ensemble du raster doit tenir en mémoire. Avec gdal_calc.py, la lecture du raster en petits morceaux est gérée pour vous.
Iamlukesky
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.