Saya memiliki integer raster yang ingin saya buat tabel atribut raster menggunakan Python dan GDAL. Saya bisa membuat tabel atribut raster GDAL dengan Python sebagai berikut:
>>> rat = gdal.RasterAttributeTable()
Ini berfungsi dengan baik, seperti yang bisa kita lihat:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
Tabel yang dibuat tidak memiliki baris atau kolom:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
Saya membuat kolom yang disebut "Nilai" untuk menyimpan nilai unik dalam raster:
>>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax)
0
Ini baik, dan jumlah kolom diperbarui:
>>> rat.GetColumnCount()
1
Sekarang saya harus menambahkan nilai (catatan) ke kolom agar dapat digunakan. Saya bisa mendapatkan daftar nilai unik dari band raster seperti:
>>> 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]
Apa yang ingin saya lakukan adalah membuat for loop untuk mengulang vals
dan mengisi kolom pada tabel atribut. Saya pikir saya bisa melakukan sesuatu seperti ini:
>>> for i in range(len(vals)):
rat.SetValueAsInt(i, 0, vals[i])
... di mana i
baris (catatan), 0
adalah indeks bidang dan vals[i]
merupakan nilai integer yang ingin saya masukkan. Tapi itu menyebabkan kesalahan:
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'
Kesalahan ini disebabkan karena saya menggunakan vals[i]
panggilan SetValueAsInt()
daripada menggunakan integer secara langsung. Misalnya, rat.SetValueAsInt(0, 0, 0)
berfungsi dengan baik, tetapi tidak berguna untuk mengisi kolom jika saya hanya ingin mengulang daftar nilai unik.
Apakah ini masalah yang diketahui? Google sejauh ini tidak terlalu berguna. Apa yang bisa saya lakukan untuk mengatasi masalah ini?
sumber