Python / GDAL erhalten eindeutige Werte in Raster mit diskreten Werten

8

Ich möchte einige Ratschläge dazu erhalten, wie eine Liste eindeutiger Werte eines Rasters mit diskreten Werten mithilfe von Python und GDAL am effizientesten zurückgegeben werden kann.

Ich hatte gedacht, dass der naheliegendste Weg darin besteht, die Attributtabelle des Rasters zu untersuchen. Wenn ich dies jedoch band.GetDefaultRAT()im Bereich eines Raster-Datasets tue , das eine Attributtabelle enthält (die Tabelle ist ohnehin in ArcCatalog sichtbar), lautet das Ergebnis immer None:

>>> rat = band.GetDefaultRAT()
>>> rat == None
True

In diesem Fall muss ich am Ende jede Zelle des Rasters durchsuchen und manuell eine Liste eindeutiger Werte erstellen. Ist dies der einzige Weg, dies zu tun?

Oder gibt es eine Möglichkeit, eine Attributtabelle mit Python und GDAL zu erstellen und diese dann nach einer Liste eindeutiger Werte abzufragen?

hendra
quelle
Welche Version von GDAL verwenden Sie übrigens?
RK
dumme Frage, aber was ist RAT?
Nickves
RAT steht für Raster Attribute Table.
Markus M.

Antworten:

10

Wenn ich es richtig verstanden habe, können Sie die Funktion np.unique von numpy lib verwenden:

from osgeo import gdal
import numpy as np

ds = gdal.Open("myimg.ext")
band =  ds.GetRasterBand(1)
array = np.array(band.ReadAsArray())
values = np.unique(array)

oder Sie können es einmal machen:

values = np.unique(np.array(ds.GetRasterBand(1).ReadAsArray()))
Nickves
quelle
Warum band.ReadAsArray()einen np.arrayAnruf tätigen? Gibt es nicht bereits ein numpy Array zurück?
jpmc26
1
Ja tut es. Das Umschließen in ein np.array hat keine Leistungseinbußen, da es sich nicht um eine Kopie handelt, sondern dieselbe Speicheradresse verwendet und Ihre IDE dabei hilft, das Objekt zu identifizieren, sodass die automatische Vervollständigung aktiviert ist.
Nickves