Таблиці атрибутів Python, GDAL та побудови растрових


14

У мене є ціле растрове значення, для якого я б хотів створити таблицю атрибутів растра за допомогою Python та GDAL. Я можу створити таблицю атрибутів растра GDAL в Python наступним чином:

>>> 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]

Що я хотів би зробити, це створити цикл для проходження циклу 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 поки що не був дуже корисним. Що я можу зробити, щоб подолати цю проблему?

Відповіді:



3

Якщо ви використовуєте vals = numpy.unique(data).tolist()замість цього, воно автоматично перетворює кожне значення у тип int python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.