GDAL在Python中多边形创建空白多边形?


12

我在python中使用Polygonize函数遇到麻烦。可以在此处找到食谱的示例。

我的代码的相关部分是:

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工具,该转换在QGIS中工作正常

栅格化的屏幕截图:

栅格化

以及来自QGIS工具的最终转换的屏幕截图:

QGIS工具中的多边形栅格

我正在Windows 7 GDAL 1.10.0-3版上使用Enthought发行版

问题是我无法使用GDAL和Cookbook示例在python中对栅格进行多边形处理,我可以在QGIS GUI中对同一栅格进行多边形处理而没有问题


您的栅格看起来像什么?它真的包含多边形吗?如果改用gdal_polygonize.py可以工作吗?
BradHards 2014年

编辑以添加QGIS中工作流程的屏幕截图
camdenl 2014年

这里的实际问题是什么?
Fezter

添加了特定的问题
camdenl 2014年

3
我有一个类似的问题(正在创建空白shapefile),并且创建字段没有帮助。我做错的是,在调用多边形之前,我没有关闭代码中的shapefile。您确实在示例中将其关闭,我只是将其发布以供他人参考。
斯蒂芬妮2015年

Answers:


19

问题是我没有创建一个字段来存储栅格波段。深入研究gdal_polygonize.py文件后,我意识到调用gdal.Polygonize时并不会自动完成此操作,而是使用此处找到的功能。

这是创建字段并向该字段写入乐队所需的额外步骤:

newField = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
outLayer.CreateField(newField)

然后,我们可以将频段写入索引为0的该字段:

gdal.Polygonize(band, None, outLayer, 0, [], callback=None )

我也试图使用gdal.Polygonize()函数将我的栅格作为python中的多边形获取。但是最后一行显示了运行时错误!为什么?
Shiuli Pervin

它与地理参考栅格文件配合使用非常好。结果是多边形太多,但是我只想要一个大的多边形来显示栅格的轮廓。有谁知道它如何同时工作?
Shiuli Pervin

仍然我得到空的shapefile,但是我在dbf文件中有行。请澄清我!
萨蒂亚·钱德拉

我只是遇到了这个问题,但是您可以输入索引-1,而不是添加虚拟字段。见这里该字段仅添加如果index> = 0。
jon_two
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.