摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题。但是也有这种时候,就是进行查询时的条件比较复杂。针对这种情况,OGR也提供了更加灵活的解决方案:支持使用SQL语句进行查询。 例如执行SQL查询语句ExecuteSQL(...

属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题。但是也有这种时候,就是进行查询时的条件比较复杂。针对这种情况,OGR也提供了更加灵活的解决方案:支持使用SQL语句进行查询。

例如执行SQL查询语句ExecuteSQL(),凭借SQL的强大功能,可以执行更复杂的任务。例如下面这段代码,是从东北地区的分县数据中选择出吉林省的县级行政单位(对应的Prov_ID为22),并且按行政代码(BNDRY_ID)降序打印。

 
1
2
3
4
5
6
7
8
9
10
11
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(<result_layer>)是将查询结果释放,在执行下一条SQL语句之前一定要先释放。

为了更加方便,同样将查询的结果生成了数据来查看。

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

 
1
2
3
whileresultFeat:
    print resultFeat.GetField('BNDRY_ID')
    resultFeat=result.GetNextFeature()

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

Python与开源GIS:在OGR中使用SQL语句进行查询的更多相关文章

  1. Python与开源GIS

    https://www.osgeo.cn/pygis/ 这里列出了与 GIS 相关的 Python 开源类库与工具. 基础类库(抽象库) • GDAL/OGR 是大部分开源GIS的基础,也包括如Arc ...

  2. python中的 sql语句用法

    函数中应用sql语句def _get_cust_number(self,cr,uid,ids,field_name,args,context=None): res={} for order in se ...

  3. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

  4. 在Excel中使用SQL语句查询和筛选

    本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...

  5. EF中执行sql语句,以及事务

    EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...

  6. [转]在EntityFramework6中执行SQL语句

    本文转自:http://www.cnblogs.com/wujingtao/p/5412329.html 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有 ...

  7. SQL语句在查询分析器中可以执行,代码中不能执行

    问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...

  8. 在EntityFramework6中执行SQL语句

    在EntityFramework6中执行SQL语句 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有操作.这一节我来介绍一下如何使用在EF6中执行SQL语 ...

  9. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

    在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2 ...

随机推荐

  1. 「OC」类和对象

    一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO ...

  2. Oracle Split 函数

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  3. iOS显示PDF

    使用UIWebView来显示 //locale file NSString *html = [NSString stringWithContentsOfFile:path1 encoding:NSUT ...

  4. 高质量程序设计指南C/C++语言——C++/C编译预处理

    C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...

  5. django-celery提供给顾客使用实例

    导入数据库 from djcelery import models as celery_models   celery_models.PeriodicTask.objects.create(...) ...

  6. 瀑布流的三种实现方式(原生js+jquery+css3)

    前言 项目需求要弄个瀑布流的页面,用的是waterfall这个插件,感觉还是可以的,项目赶就没自己的动手写.最近闲来没事,就自己写个.大致思路理清楚,还是挺好实现的... 原生javascript版 ...

  7. XIV

    http://publib.boulder.ibm.com/infocenter/ibmxiv/r2/index.jsp

  8. 设计模式多线程方面之Thread-Per-Message 模式

    Thread-Per-Message模式是一个很简单但很常应用的模式,尤其是在GUI程式中,我们举个例子,当您设计一个文件编辑器时,您可能像这样注册一个开启档案的事件处理:  menuOpenFile ...

  9. thinkphp 常用的查询

    php 常用的数据库查询方式: //根据where 条件查询,使用select()方法 访问:http://localhost/thinkphp2/index.php/Machine/search_i ...

  10. 基于visual Studio2013解决C语言竞赛题之0407最大值最小值

      题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...