摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种 功能可以解决大部分实际中的问题。...
本页面的内容不再更新。
属性选择与空间选择都可以看作是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