파이썬과 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
래스터에 고유 한 값을 저장하기 위해 "Value"라는 열을 만듭니다.
>>> 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)
잘 작동하지만 고유 값 목록을 반복하려는 경우 열을 채우는 데 쓸모가 없습니다.
이것은 알려진 문제입니까? 구글은 지금까지 유용하지 않았다. 이 문제를 해결하려면 어떻게해야합니까?