SpatiaLite 是一套具有空间数据功能的 SQLite 数据库系统。
本文演示如何通过图形界面或命令行打开一个 SpatiaLite 数据库并执行简单查询。
SpatiaLite-GUI 为浏览和维护空间数据库提供了一套图形界面,方便使用鼠标点击生成 SQL 命令以方便地管理表单和数据。
首先打开一个 SpatiaLite 数据库并查看表单内的字段:
在 MunicipalHallsView 右击选择 “Show Columns” 显示字段。
界面将分为三个部分:
右击 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 是浏览空间记录图层的一个简单客户端。
显示的地图为意大利 Trento 省。
- 右击 Highways 高速公路图层并选择 Hide 隐藏。
- 右击 LocalCouncilsTrento 地方议会图层点击 Layer Configuration->Classify 并选择 “Shape Area” 。设置 4 Classes(分组)并设定最小(Min)和最大(Max)值色块并选择颜色。这样就得到了 Trento 的分色显示地图。
- 右击 LocalCouncils 并选择 Layer configuration->Graphics 可以编辑 Border Graphics 改变边界线颜色。
- 将地图放大到一部分并右击 PopulatedPlaces 图层选择 Indentify on 。点击任意一个居民点图标可以显示其属性信息。
需要自动操作或者使用脚本的用户将会更希望使用命令行界面。本例演示从命令行读取一个 shp 文件并搜索一条道路附近的学校。
从桌面选择 Applications -> Accessories -> Terminal Emulator 可以开启命令行界面。
以 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