【问题标题】:gdal.RasterizeLayer: using the where parametergdal.RasterizeLayer:使用 where 参数
【发布时间】:2017-11-23 07:30:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python gdal rasterize


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多