Raster mit GDAL neu klassifizieren?

8

Ich suche ein Tool aus der GDAL, mit dem ein Raster mit mehreren diskreten Werten neu klassifiziert werden kann. Bisher habe ich Reclassify-Raster mit GDAL und Python gefunden . Es scheint jedoch, dass hier nur einzelne Werte behandelt werden können.

Gibt es so etwas wie ein natives Tool aus der Suite?

Arne
quelle

Antworten:

8

gdal_calc kann für eine Neuklassifizierung vieler Klassen verwendet werden.

Sie können beispielsweise Werte unter (und gleich) 12 bis 10 ändern, Werte von 20, 30, 40, 50 bleiben gleich und Werte zwischen über 50 und 62 werden auf 60 geändert:

  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
quelle
Beachten Sie, dass die GDAL-Dokumentation ( gdal.org/gdal_calc.html ) impliziert, dass gdal_calc.py mit mehreren Rastern funktioniert, da Sie einen beliebigen Großbuchstaben des Alphabets auswählen können. Ich konnte es nicht mit mehr als zwei Eingängen gleichzeitig zum Laufen bringen. Es wurden mehr Eingaben akzeptiert, ohne dass ein Fehler auftrat, aber meine Tests zeigten, dass nur die ersten beiden verwendet wurden.
David A
7

gdal_reclassify ist ein inoffizielles Python-Tool, das auf Python-GDAL-Bindungen basiert und nach mehreren Werteklassen neu klassifiziert werden kann.

Bedarf:

python
numpy
gdal binaries
python-gdal bindings

Beispiel:

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
quelle
3

Wenn Sie in einem Python-Skript arbeiten, verwenden Sie die .ReadAsArrayMethode. Sie können dann mit numpy neu klassifizieren.

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
quelle
1
Nachteil ist, dass das gesamte Raster in den Speicher passen muss. Mit gdal_calc.py wird das Lesen des Rasters in kleineren Blöcken für Sie erledigt.
Iamlukesky