Python与开源GIS:在OGR中使用SQL语句进行查询

Python与开源GIS

Python与开源GIS:在OGR中使用SQL语句进行查询

2019-10-28 作者: xuzhiping 浏览: 2687 次

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

Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。
本页面的内容不再更新。



属性选择与空间选择都可以看作是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语句之前一定要先释放。 为了更加方便,同样将查询 的结果生成了数据来查看。

jilin_sql_filter

可以对查询的结果进行遍历:

    while resultFeat :
        print resultFeat.GetField('BNDRY_ID')
        resultFeat = result.GetNextFeature ()

要注意,ExecuteSQL是基于数据集进行的,而不是图层。

返回目录:Python与开源GIS

关注“开源集思”公众号
获取免费资源

随机推荐


Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org