SpatiaLite 快速入门¶
SpatiaLite 是一套具有空间数据功能的 SQLite 数据库系统。
本文演示如何通过图形界面或命令行打开一个 SpatiaLite 数据库并执行简单查询。
使用 SpatiaLite-GUI 图形界面¶
SpatiaLite-GUI 为浏览和维护空间数据库提供了一套图形界面,方便使用鼠标点击生成 SQL 命令以方便地管理表单和数据。
首先打开一个 SpatiaLite 数据库并查看表单内的字段:
- 通过 打开 SpatiaLite-GUI 。
在 MunicipalHallsView 右击选择 “Show Columns” 显示字段。
界面将分为三个部分:
- 左侧显示数据库结构,包含表单、字段等信息。右击一个栏目可以选择一些基本的数据库操作。
- 右上方的面板显示了所选操作的 SQL 命令。可以通过编辑此处的文字输入自定义命令。
- 右下角面板显示所执行的 SQL 命令的结果。
右击 MunicipalHalls 表单并选择 “Edit table rows” 。注意右上角即时生成的 SQL 命令以及右下角显示的结果:
SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry" FROM "MunicipalHalls" ORDER BY ROWID
可以调整该 SQL 命令,从而只从 MunicipalHallsView 的 NOME_PROV 中包含 “BRESCIA” 的记录获取 NOME 。在右上角 SQL 面板中:
SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude FROM "MunicipalHallsView" WHERE NOME_PROV LIKE "BRESCIA";
点击 “Execute SQL” 执行,结果将显示在右下角。
使用 SpatiaLite-GIS¶
SpatiaLite-GIS 是浏览空间记录图层的一个简单客户端。
- 从桌面 Desktop GIS 菜单选择 SpatiaLite-GIS 。
- 点击 “Connecting existing SQLite DB” 连接至 /home/user/data/spatialite/trento.sqlite 。
显示的地图为意大利 Trento 省。
- 右击 Highways 高速公路图层并选择
隐藏。- 右击 LocalCouncilsTrento 地方议会图层点击
并选择 “Shape Area” 。设置 4 Classes(分组)并设定最小(Min)和最大(Max)值色块并选择颜色。这样就得到了 Trento 的分色显示地图。- 右击 LocalCouncils 并选择
可以编辑 Border Graphics 改变边界线颜色。- 将地图放大到一部分并右击 PopulatedPlaces 图层选择
。点击任意一个居民点图标可以显示其属性信息。
从命令行运行¶
需要自动操作或者使用脚本的用户将会更希望使用命令行界面。本例演示从命令行读取一个 shp 文件并搜索一条道路附近的学校。
从桌面选择
可以开启命令行界面。以 spatialite 打开示例数据库:
spatialite /home/user/data/spatialite/trento.sqlite
基本命令:
.help(帮助信息) .tables(显示表单) .quit(退出)
创建一个数据库并读取 shp:
创建一个新的数据库并从 north_carolina 数据集读取两个 shp 文件。
user@osgeo-6:~$ spatialite test.sqlite SpatiaLite version ..: 3.1.0-RC2 Supported Extensions: - 'VirtualShape' [direct Shapefile access] - 'VirtualDbf' [direct DBF access] - 'VirtualXL' [direct XLS access] - 'VirtualText' [direct CSV/TXT access] - 'VirtualNetwork' [Dijkstra shortest path] - 'RTree' [Spatial Index - R*Tree] - 'MbrCache' [Spatial Index - MBR cache] - 'VirtualSpatialIndex' [R*Tree metahandler] - 'VirtualFDO' [FDO-OGR interoperability] - 'SpatiaLite' [Spatial SQL - OGC] PROJ.4 version ......: Rel. 4.8.0, 6 March 2012 GEOS version ........: 3.3.3-CAPI-1.7.4 SQLite version ......: 3.7.9 Enter ".help" for instructions spatialite> spatialite> .loadshp data/north_carolina/shape/schools_wake schools utf-8 3358 spatialite> .loadshp data/north_carolina/shape/roadsmajor roads utf-8 3358
在 .loadshp 命令中第一项为目标文件名(无 .shp 扩展名),第二项为目标表单,然后是字符编码和投影系统的 EPSG 代码。
查询 42 高速公路周围的学校:
spatialite> SELECT s.NAMESHORT, s.ADDRNUMBER, s.ADDRROOT ...> FROM schools AS s, roads AS r ...> WHERE r.ROAD_NAME = "NC-42" AND ...> ST_Distance(s.Geometry, r.Geometry) < 1000; FUQUAY-VARINA|6600|Johnson Pond Rd WILLOW SPRINGS|6800|Dwight Rowland Rd FUQUAY-VARINA|109|N Ennis St LINCOLN HEIGHTS|307|Bridge St
输出:
最后,我们可以对逗号分隔的 “schools_rt42.txt” 文本文件作查询:
spatialite> .mode csv spatialite> .output "schools_rt42.txt" spatialite> SELECT s.NAMESHORT, s.ADDRNUMBER, s.ADDRROOT ...> FROM schools AS s, roads AS r ...> WHERE r.ROAD_NAME = "NC-42" AND ...> ST_Distance(s.Geometry, r.Geometry) < 1000; spatialite>.q