gispython定义查询_Python与开源GIS:SpatiaLite 中的基本SQL数据库查询用法

Python与开源GIS教程的内容,开发了单独的内容,请打开

https://www.osgeo.cn/pygis/

查看。

本页面的内容不再更新。

这一节我们来看一下基本的SQL语句用法。使用最通用的

Shape 文件作为源数据,来生成进行实验使用的

SpatiaLite 数据库文件。转换的时候,使用的是前面介

绍过的GDAL/OGR 的工具 ogr2ogr。

ogr2ogr -f SQLite -dsco SPATIALITE=YES x_china.db stats_county.shp -nlt multipolygon

% /test-2.3.sqlite数据库,在 \href{https://www.gaia-gis.it/spatialite-2.3.1/resources.html} 下载。

开始使用 SQL

现在开始学习SQLite,我们可以在 x_china.db 数据库上执行

第一条SQL查询。

$ spatialite x_china.db

spatialite> .headers on

spatialite> select * from STATS_COUNTY limit 5;

OGC_FID|GEOMETRY|province|name|ename|popu

1||23.0|南充市|mohexian|66.0

2||23.0|塔河县|tahexian|10.0

3||15.0|额尔古纳右旗|geergunyouqi|17.0

4||23.0|呼玛县|humaxian|5.0

5||15.0|额尔古纳左旗|geergunzuoqi|8.0

5|Magliano Alfieri|1674|1|0|0|

SELECT 是SQL中最常用的查询语句,上面的命令,从数据表中,获取了最开始的5条记录的所有字段的信息。

现在开始第二条SQL查询:spatialite> SELECT name AS County, popu as Population FROM stats_county ORDER BY name LIMIT 5;

County|Population

丁青县|6.0

七台河市|49.0

万全县|21.0

万县市|0.0

万宁县|62.0

复杂一点的SQL查询

spatialite> select name, popu from stats_county WHERE popu > 500 order by popu DESC;

name|popu

上海市|1137.0

北京市|974.0

涪陵市|896.0

重庆市|896.0

武汉市|749.0

天津市|682.0

广州市|567.0

SQL的高级用法

现在,我们看到SQL查询的另一种模式:

spatialite> select COUNT(*) as '# 城镇',

...> MIN(popu) as '最少',

...> MAX(popu) as '最多',

...> SUM(popu) as '人口总数',

...> SUM(popu) / COUNT(*) as '城镇平均人口'

...> from stats_county;

# 城镇|最少|最多|人口总数|城镇平均人口

2390|0.0|1137.0|125322.0|52.4359832635983

SQL语句可以写到多行中。SQLite会把分号前面的语句当成一条指令来执行;

可以在SQL查询中使用函数,如 COUNT()、 SUM()、 MIN()、 MAX(),这些意义都是显而易见的,不再赘述。

有效的SQL查询由简单的表达式和函数组成。请看下面的例子:

spatialite> select (10 - 11) * 2 as number, abs((10 - 11) * 2) as absolutevalue;

number|absolutevalue

-2|2

在这个例子中,并没有使用数据库字段或数据表。

现在,我们稍做变动重复上述查询

spatialite> select name, popu, HEX(GEOMETRY) from stats_county WHERE popu > 500 order by popu DESC;

name|popu|HEX(GEOMETRY)

上海市|1137.0|0001CAF80400DA2CBC76210B37419E72327E805B4E4112912 ... ...

北京市|974.0|0001CAF8040089536BC915292A418505E287E150524119F204 ... ...

涪陵市|896.0|0001CAF80400BC9DD1586C080741D466174E90C04B41AB76BF ... ...

重庆市|896.0|0001CAF8040088D147F6BF47FF4032E5513FA3BE4B4192D70E ... ...

武汉市|749.0|0001CAF804002ACF64BED4322941789BF197B9AF4C41E2C05E ... ...

天津市|682.0|0001CAF80400B27E94A949552E4172BCB19009025241C45EF6 ... ...

广州市|567.0|0001CAF804003ABD370486232A41566628A0539D4641A1DACA ... ...

上面的 HEX(GEOMETRY)的结果并没有完全打印出来。

HEX()| 函数返回 GEOMETRY 字段的二进制大对象的十六进制表达;在前面执行的时候 GEOMETRY 字段看起来像是空的,现在通过使用 HEX() 函数,我们知道里面包含有二进制数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值