../_images/logo_spatialite.png

SpatiaLite Quickstart

Spatialite是一个添加了空间函数的sqlite数据库引擎。

sqlite是一个简单、健壮、易于使用、非常轻量的数据库管理系统(DBMS)。每个sqlite数据库都只是一个文件。您可以自由复制、压缩它,并在Windows、Linux、MacOS等之间进行端口连接。

这个快速启动描述了如何从GUI应用程序和命令行中打开空间站点数据库。显示了一些示例SQL查询。

启动Spatialite并加载数据库

空间图形用户界面为查看和维护空间数据库提供了一个可视化界面。您可以使用点击式函数轻松地看到表和数据内容的结构,其中许多函数构造通用的SQL查询,或者构建自己的SQL查询。

  1. 通过选择打开空间图形用户界面 Geospatial->Databases->Spatialite GUI .

  2. 选择 File->Connecting an existing SQLite DB

  3. 浏览到 /home/user/data/spatialite 目录和选择 trento.sqlite .

    ../_images/spatialite-gui-trento.png
  4. 右键单击municipalhallsview表并选择“显示列”

    ../_images/spatialite-gui-columns.png
  5. 您将注意到显示屏分为三个区域:

    • 左侧面板显示数据库层次结构,例如表列表和表中的列。右键单击左侧面板的元素,从常用数据库操作列表中进行选择。
    • 右上角的面板显示所选操作的SQL。您可以在此面板中输入自己的自定义SQL。
    • 右下角的面板显示SQL查询的结果。
  6. 右键单击MunicipalHalls表并选择“编辑表行”。请注意,在右上角窗格中为您创建的SQL查询,结果显示在右下角。::

    SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry"
        FROM "MunicipalHalls"
        ORDER BY ROWID
    

运行SQL查询

  1. 现在,让我们尝试调整此SQL语句,以获得nome和(lat,long),仅nome prov字段包括“brescia”,这次使用municipalhallsview。在右上角的SQL窗格中,键入:

    SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude
        FROM "MunicipalHallsView"
        WHERE NOME_PROV LIKE "BRESCIA";
    
  2. 单击右侧的“ExecuteSQL”按钮,在右下角的窗格中查看结果。

    ../_images/spatialite-gui-select.png

从命令行运行spatialite

需要编写脚本或自动执行查询的用户将从命令行界面了解使用空间数据库的优势。在本例中,我们将加载一个shapefile,并搜索靠近42号公路的学校。

  1. 在使用命令行之前,我们需要打开一个终端窗口: System Tools -> LXTerminal .

  2. 在终端中打开示例数据库 spatialite 通过打字:

    spatialite /home/user/data/spatialite/trento.sqlite
    

    命令行中的有用命令:

    .help
    .tables
    .quit
    

创建一个新的spatialite数据库并加载shapefile

  1. 让我们创建一个新的空空间网站数据库,并从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代码。

  2. 现在我们将查询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
    
  3. 最后,我们使用以下命令将查询输出到一个“逗号分隔值”文本文件“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
    

尝试的东西

以下是您要尝试的其他一些挑战:

  • 使用空间图形用户界面检查几何图形
  • 打开和编辑qgis中的空间层

接下来呢?

要了解更多有关空间陨石的信息,首先要了解的是 SpatiaLite project page .

一定要访问教程 Spatialite cookbook