SpatiaLite 是一套具有空间数据功能的 SQLite 数据库系统。
SQLite is a Database Management System (DBMS) which is simple, robust, easy to use and very lightweight. Each SQLite database is simply a file. You can freely copy it, compress it, and port it between Windows, Linux, MacOs etc.
本文演示如何通过图形界面或命令行打开一个 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
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 文件并搜索一条道路附近的学校。
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
- 输出:
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