访问量: 170 次浏览
属性选择与空间选择都可以看作是OGR内置的选择功能,这两种 功能可以解决大部分实际中的问题。但是也有这种时候,就是 进行查询时的条件比较复杂。针对这种情况,OGR也提供了更加 灵活的解决方案:支持使用SQL语句进行查询。 例如执行SQL 查询语句ExecuteSQL(),凭借SQL的强大功能,可以执行更复 杂的任务。
例如 下面这段代码,是从东北地区的分县数据中选择出吉林省的 县级行政单位(对应的Prov_ID为22),并且按行政代码 (BNDRY_ID)降序打印。
from osgeo import ogr
driver = ogr.GetDriverByName("ESRI Shapefile")
world_shp = '/opt/gdata/fenxian.shp'
world_ds = ogr.Open(world_shp)
world_layer = world_ds.GetLayer()
world_layer_name = world_layer.GetName()
result = world_ds.ExecuteSQL("select * from %s where prov_id = '22' order by BNDRY_ID desc" % (world_layer_name)) # )
resultFeat = result.GetNextFeature ()
out_shp = '/opt/gdata/sql_res.shp'
create_shp_by_layer(out_shp, result)
world_ds.ReleaseResultSet(result)
可以看到上面使用的SQL语句与平常的SQL语句没有什么区别, 我们使用了SELECT语句,也使用了WHERE条件;不同的是在 OGR中,结果会生成空间数据。
最后一句|ReleaseResultSet()是将查询结果释放,在执行下 一条SQL语句之前一定要先释放。 为了更加方便,同样将查询 的结果生成了数据来查看。

可以对查询的结果进行遍历:
while resultFeat :
print resultFeat.GetField('BNDRY_ID')
resultFeat = result.GetNextFeature ()
要注意,ExecuteSQL是基于数据集进行的,而不是图层。
返回目录:Python与开源GIS