我有一个整数栅格,我想使用Python和GDAL为其构建栅格属性表。我可以在Python中创建GDAL栅格属性表,如下所示:
>>> rat = gdal.RasterAttributeTable()
如我们所见,这很好用:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
这样创建的表没有行或列:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
我创建了一个名为“值”的列,以将唯一值存储在栅格中:
>>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax)
0
很好,并且列数已更新:
>>> rat.GetColumnCount()
1
现在,我必须将值(记录)添加到该列中才能使用。我可以从栅格波段中获得唯一值的列表,如下所示:
>>> 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]
我想做的是创建一个for循环以遍历vals
并填充属性表中的列。我以为我可以做这样的事情:
>>> for i in range(len(vals)):
rat.SetValueAsInt(i, 0, vals[i])
...这里i
的行(记录),0
字段索引和vals[i]
我要插入的整数值。但这会导致错误:
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'
造成该错误的原因是,我vals[i]
在调用中SetValueAsInt()
使用而不是直接使用整数。例如,rat.SetValueAsInt(0, 0, 0)
工作正常,但如果我只想遍历唯一值列表,则对填充列毫无用处。
这是一个已知的问题?到目前为止,谷歌还不是很有用。我该怎么办才能解决这个问题?