Python ve GDAL kullanarak bir raster öznitelik tablosu oluşturmak istiyorum bir tamsayı raster var. Python'da aşağıdaki gibi bir GDAL tarama özelliği tablosu oluşturabilirim:
>>> rat = gdal.RasterAttributeTable()
Gördüğümüz gibi bu iyi çalışıyor:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
Bu şekilde oluşturulan tablonun satırları veya sütunları yoktur:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
Rasterde benzersiz değerleri saklamak için "Değer" adlı bir sütun oluşturuyorum:
>>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax)
0
Bu iyidir ve sütun sayısı güncellenir:
>>> rat.GetColumnCount()
1
Şimdi sütuna herhangi bir kullanım için değerler (kayıtlar) eklemeliyim. Raster grubundan benzersiz değerlerin bir listesini şöyle alabilirsiniz:
>>> 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]
Ne yapmak istiyorum döngü vals
ve öznitelik tablosundaki sütun doldurmak için bir döngü oluşturmaktır . Böyle bir şey yapabileceğimi düşündüm:
>>> for i in range(len(vals)):
rat.SetValueAsInt(i, 0, vals[i])
... i
satır (kayıt) nerede , 0
alan dizini ve vals[i]
eklemek istediğim tamsayı değeridir. Ancak bir hataya neden olur:
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'
Doğrudan bir tamsayı kullanmak yerine vals[i]
çağrısında kullandığım hataya neden olur SetValueAsInt()
. Örneğin, iyi rat.SetValueAsInt(0, 0, 0)
çalışıyor, ancak yalnızca benzersiz değerler listesi üzerinde döngü yapmak istiyorsam sütunu doldurmak için işe yaramaz.
Bu bilinen bir sorun mu? Google şu ana kadar pek kullanışlı olmamıştı. Bu sorunu aşmak için ne yapabilirim?