
SpatiaLite Quickstart¶
Spatialite是一个添加了空间函数的sqlite数据库引擎。
sqlite是一个简单、健壮、易于使用、非常轻量的数据库管理系统(DBMS)。每个sqlite数据库都只是一个文件。您可以自由复制、压缩它,并在Windows、Linux、MacOS等之间进行端口连接。
这个快速启动描述了如何从GUI应用程序和命令行中打开空间站点数据库。显示了一些示例SQL查询。
启动Spatialite并加载数据库¶
空间图形用户界面为查看和维护空间数据库提供了一个可视化界面。您可以使用点击式函数轻松地看到表和数据内容的结构,其中许多函数构造通用的SQL查询,或者构建自己的SQL查询。
通过选择打开空间图形用户界面
.选择
浏览到
/home/user/data/spatialite
目录和选择trento.sqlite
.右键单击municipalhallsview表并选择“显示列”
您将注意到显示屏分为三个区域:
- 左侧面板显示数据库层次结构,例如表列表和表中的列。右键单击左侧面板的元素,从常用数据库操作列表中进行选择。
- 右上角的面板显示所选操作的SQL。您可以在此面板中输入自己的自定义SQL。
- 右下角的面板显示SQL查询的结果。
右键单击MunicipalHalls表并选择“编辑表行”。请注意,在右上角窗格中为您创建的SQL查询,结果显示在右下角。::
SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry" FROM "MunicipalHalls" ORDER BY ROWID
从命令行运行spatialite¶
需要编写脚本或自动执行查询的用户将从命令行界面了解使用空间数据库的优势。在本例中,我们将加载一个shapefile,并搜索靠近42号公路的学校。
在使用命令行之前,我们需要打开一个终端窗口:
.在终端中打开示例数据库 spatialite 通过打字:
spatialite /home/user/data/spatialite/trento.sqlite
命令行中的有用命令:
.help .tables .quit
创建一个新的spatialite数据库并加载shapefile¶
让我们创建一个新的空空间网站数据库,并从North_Carolina数据集中加载两个形状文件:
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扩展名的shapefile,然后是新的空间站点表的名称,然后是字符编码,最后是shapefile的crs的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