У меня возникли проблемы с использованием функции Polygonize в Python. Пример поваренной книги для этого можно найти здесь .
Соответствующая часть моего кода:
sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None
Я знаю, что у группы есть соответствующая информация, вот фрагмент bandArray
:
array([[ 4., 4., 3., 3., 3., 2., 2., 2., 2., 3., 3., 3., 3.,
3., 3., 3., 3., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4.],
Когда я открываю таблицу атрибутов в QGIS, она пуста:
Редактировать:
Преобразование работает очень хорошо в QGIS, используя Raster -> Conversion -> Polygonize tool
Снимок экрана растрового полигона:
И скриншот результирующего преобразования из инструмента QGIS:
Я использую дистрибутив Enthought на Windows 7, GDAL версии 1.10.0-3
Проблема в том, что я не могу полигонизировать растр в python, используя GDAL и пример поваренной книги, я могу полигонизировать этот же растр без проблем в QGIS GUI
Ответы:
Проблема в том, что я не создавал поле для хранения растровой полосы. Покопавшись в файле gdal_polygonize.py, я понял, что это не выполняется автоматически при вызове gdal.Polygonize, который вместо этого использует найденную здесь функцию .
Вот дополнительный шаг, необходимый для создания поля и записи полосы в поле:
Затем мы можем записать группу в это поле с индексом 0:
источник