摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 这一节我们来看一下基本的SQL语句用法。使用最通用的 Shape 文件作为源数据,来生成进...
本页面的内容不再更新。
这一节我们来看一下基本的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() 函数,我们知道里面包含有二进制数据。
返回目录:Python与开源GIS