Raster mit GDAL neu klassifizieren?


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

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"

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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.