Ich habe ein ganzzahliges Raster, für das ich eine Raster-Attributtabelle mit Python und GDAL erstellen möchte. Ich kann eine GDAL-Rasterattributtabelle in Python wie folgt erstellen:
>>> rat = gdal.RasterAttributeTable()
Das funktioniert gut, wie wir sehen können:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
Die so erstellte Tabelle enthält keine Zeilen oder Spalten:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
Ich erstelle eine Spalte mit dem Namen "Value", um die eindeutigen Werte im Raster zu speichern:
>>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax)
0
Dies ist in Ordnung und die Spaltenanzahl wird aktualisiert:
>>> rat.GetColumnCount()
1
Jetzt muss ich der Spalte Werte (Datensätze) hinzufügen, damit sie von Nutzen ist. Ich kann eine Liste mit eindeutigen Werten aus der Raster-Gruppe abrufen, und zwar wie folgt:
>>> data = band.ReadAsArray(0, 0, dataset.RasterXSize, dataset.RasterYSize)
>>> vals = list(numpy.unique(data))
>>> vals
[3, 7, 8, 10, 11, 12, 13, 14, 17, 18, 20, 22, 23, 25, 27, 28, 41, 45, 52, 56]
Ich möchte eine for-Schleife erstellen, um vals
die Spalte in der Attributtabelle zu durchlaufen und zu füllen. Ich dachte, ich könnte so etwas machen:
>>> for i in range(len(vals)):
rat.SetValueAsInt(i, 0, vals[i])
... wo i
ist die Zeile (Datensatz), 0
ist der Feldindex und vals[i]
ist der ganzzahlige Wert, den ich einfügen möchte. Aber es verursacht einen Fehler:
Traceback (most recent call last):
File "<pyshell#32>", line 2, in <module>
rat.SetValueAsInt(i, 0, vals[i])
File "C:\Python27\lib\site-packages\osgeo\gdal.py", line 1139, in SetValueAsInt
return _gdal.RasterAttributeTable_SetValueAsInt(self, *args)
TypeError: in method 'RasterAttributeTable_SetValueAsInt', argument 4 of type 'int'
Der Fehler wird dadurch verursacht, dass ich vals[i]
im Aufruf SetValueAsInt()
eine Ganzzahl benutze , anstatt sie direkt zu verwenden. Funktioniert beispielsweise rat.SetValueAsInt(0, 0, 0)
einwandfrei, ist jedoch nicht zum Auffüllen der Spalte geeignet, wenn ich nur die Liste der eindeutigen Werte durchlaufen möchte.
Ist das ein bekanntes Problem? Google war bisher nicht sehr nützlich. Was kann ich tun, um dieses Problem zu umgehen?
quelle