ฉันมีแรสเตอร์จำนวนเต็มที่ฉันต้องการสร้างตารางแอตทริบิวต์แรสเตอร์โดยใช้ Python และ GDAL ฉันสามารถสร้างตารางแอตทริบิวต์ GDAL raster ใน Python ดังนี้
>>> rat = gdal.RasterAttributeTable()
ใช้งานได้ดีอย่างที่เราเห็น:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
ตารางที่สร้างขึ้นจึงไม่มีแถวหรือคอลัมน์:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
ฉันสร้างคอลัมน์ชื่อ "ค่า" เพื่อเก็บค่าที่ไม่ซ้ำใน raster:
>>> 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]
สิ่งที่ฉันต้องการจะทำคือการสร้างลูปเพื่อวนลูป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)
ทำงานได้ดี แต่ไม่มีประโยชน์สำหรับการเติมคอลัมน์หากฉันต้องการวนซ้ำรายการค่าที่ไม่ซ้ำ
นี่เป็นปัญหาที่ทราบหรือไม่? Google ยังไม่มีประโยชน์มากนัก ฉันจะแก้ไขปัญหานี้ได้อย่างไร