gdal.RasterizeLayer公司:使用where参数

2024-05-28 23:54:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在gdal.RasterizeLayer公司(outDs,[1],Shp,burn U值=[ii])

我的shapefile“Shp”有一个名为“landuse”的字段,它存储字符串(类名)。 我需要为不同的类名烧录一个数字。我想用一个“where”从句,比如:where‘landuse’=‘new exiture’:

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


Tags: 字符串代码公司数字whereclassiishapefile
2条回答

我不确定RasterizeOptions和where not working(无效关键字),但似乎可以使用SetAttributeFilter向Shp添加where子句:

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

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。在

^{pr2}$

相关问题 更多 >

    热门问题