0

在 python 中,我使用以下代码行:

gdal.RasterizeLayer(outDs,[1],Shp,burn_values=[ii])

我的 shapefile 'Shp' 有一个名为 'landuse' 的字段,它存储字符串(类名)。我需要为不同的班级名称刻录一个数字。我正在考虑使用“where”子句,例如: where 'landuse'='new让步':

for ii in range(class)):    
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="class[ii]"')

参数“where”似乎无法识别。我怎样才能将它传递给这个函数?我想它是可用的,根据 C API 文档: http: //gdal.org/python/osgeo.gdal-module.html#RasterizeOptions

4

2 回答 2

1

RasterizeLayer '快速'执行有点痛苦,所以这是没有测试的。

我发现了两个潜在的问题。根据您的示例代码,您实际上并未设置所需的土地利用值,而是将其"class[ii]"作为字符串传递。这意味着 GDAL 选择土地利用属性所在的特征"class[ii]"(字面意思是那个字符串)。使用字符串格式插入实际值,例如:

for ii in range(class)):    
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="{class}"'.format(class=class[ii]))

其次,在使用时RasterizeLayer,您可能应该提供一个图层作为输入,而不是您似乎建议的 Shapefile。从 Shapefile 加载图层,或考虑使用Rasterize.

gdal.Rasterize(outds, dataset)
gdal.RasterizeLayer(outds, layer)
于 2017-06-21T10:13:23.753 回答
0

我不确定 RasterizeOptions 和 where 不起作用(无效关键字),但似乎您可以使用 SetAttributeFilter 将 where 子句添加到 Shp:

for ii in range(class)):
    Shp.SetAttributeFilter("landuse='{}'".format(class[ii]))
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii])
于 2017-10-31T13:48:10.433 回答