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?

Arne
la source

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
Jot eN
la source
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"
Antonio Falciano
la source
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)
RoperMaps
la source
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