Python GDAL,SetAttributeFilter 不工作
Python GDAL, SetAttributeFilter not working
我正在尝试使用 GDAL 的 SetAttributeFilter() 来过滤我的 shapefile 图层中的特征,但过滤器似乎没有效果。
我当前的数据是来自美国人口普查局的 shapefile,但我尝试使用其他 shapefile 并得到类似的结果。
例如
from osgeo import ogr
shapefile_path = '../input/processed/shapefile/'
shapefile_ds = ogr.Open(shapefile_path)
cbsa = shapefile_ds.GetLayer('cb_2016_us_cbsa_500k')
print(cbsa.GetFeatureCount())
cbsa.SetAttributeFilter('NAME = "Chicago-Naperville-Elgin, IL-IN-WI"')
feat = cbsa.GetNextFeature()
print(feat.GetField('NAME'))
print(cbsa.GetFeatureCount())
产量
945
Platteville, WI
945
我正在使用 Python 3.6 和 GDAL 2.2.1
你可以捕获SetAttributeFilter
语句的return值,并确保它是0,否则就会出错。
在这种特殊情况下,可能是由于引用。单引号指的是字符串文字(一个值),双引号指的是 column/table 名称。
根据您运行此Python代码的方式,stdout/stderr GDAL 中的某处打印如下内容:
ERROR 1: "Chicago-Naperville-Elgin, IL-IN-WI" not recognised as an available field.
更多详细信息,请访问:
https://trac.osgeo.org/gdal/wiki/rfc52_strict_sql_quoting
要使其正常工作,只需交换 single/double 引号,因此:
cbsa.SetAttributeFilter("NAME='Chicago-Naperville-Elgin, IL-IN-WI'")
虽然这是很久以前的事了,但当我学到一些东西时,我想说一下对我的情况有用的东西,以防我再次搜索它。
对我来说,我必须有这样的语法:
cbsa.SetAttributeFilter('"NAME" = \'Chicago-Naperville-Elgin\'') # I didn't test multiple values
已接受答案的参考页面显示:
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
<character string literal> ::= <quote> [ <character representation> ... ] <quote>
可能是自 17 年以来对 ogr 的更新改变了这一点。
我正在尝试使用 GDAL 的 SetAttributeFilter() 来过滤我的 shapefile 图层中的特征,但过滤器似乎没有效果。
我当前的数据是来自美国人口普查局的 shapefile,但我尝试使用其他 shapefile 并得到类似的结果。
例如
from osgeo import ogr
shapefile_path = '../input/processed/shapefile/'
shapefile_ds = ogr.Open(shapefile_path)
cbsa = shapefile_ds.GetLayer('cb_2016_us_cbsa_500k')
print(cbsa.GetFeatureCount())
cbsa.SetAttributeFilter('NAME = "Chicago-Naperville-Elgin, IL-IN-WI"')
feat = cbsa.GetNextFeature()
print(feat.GetField('NAME'))
print(cbsa.GetFeatureCount())
产量
945
Platteville, WI
945
我正在使用 Python 3.6 和 GDAL 2.2.1
你可以捕获SetAttributeFilter
语句的return值,并确保它是0,否则就会出错。
在这种特殊情况下,可能是由于引用。单引号指的是字符串文字(一个值),双引号指的是 column/table 名称。
根据您运行此Python代码的方式,stdout/stderr GDAL 中的某处打印如下内容:
ERROR 1: "Chicago-Naperville-Elgin, IL-IN-WI" not recognised as an available field.
更多详细信息,请访问: https://trac.osgeo.org/gdal/wiki/rfc52_strict_sql_quoting
要使其正常工作,只需交换 single/double 引号,因此:
cbsa.SetAttributeFilter("NAME='Chicago-Naperville-Elgin, IL-IN-WI'")
虽然这是很久以前的事了,但当我学到一些东西时,我想说一下对我的情况有用的东西,以防我再次搜索它。
对我来说,我必须有这样的语法:
cbsa.SetAttributeFilter('"NAME" = \'Chicago-Naperville-Elgin\'') # I didn't test multiple values
已接受答案的参考页面显示:
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
<character string literal> ::= <quote> [ <character representation> ... ] <quote>
可能是自 17 年以来对 ogr 的更新改变了这一点。