目录

上一主题

5.2. 创建空间数据库

下一主题

5.4. 从SpatiaLite中导出表


本教程由OSGeo中国中心维护。

5.3. 将数据导入空间数据库

使用DB Manager可以很容易地将数据导入SpatiaLite数据库。 SpatiaLite支持以下常用格式以及许多其他格式来导入文件:

  • shp文件( .shp )

  • 数据库( .dbf )

  • 文本( .txt ),逗号分隔值( .csv ),以及Excel电子表格( .xls / .xlsx )

  • AutoCAD DXF( .dxf )

  • 地理标记语言( .gml )

  • KML 标记语言( .kml )

  • 几何JavaScript对象表示法( .geojson )

  • 可缩放矢量图形( .svg )

让我们用 DB Manager 将不同格式的数据导入 "GiffordPinochet.sqlite" 数据库。

5.3.1. 将KML导入SpatiaLite

要将KML文件导入SpatiaLite数据库,请完成以下步骤:

  1. 通过单击打开 "Database" 下面的 "DB Manager" 来打开 DB Manager ,打开 SpatiaLite 然后在 "Tree" 面板上选择 "GiffordPinochet.sqlite" 。

  2. 导航到 Table ‣ Import layer/file 导入 "Import vector layer" 对话框。

  3. 单击 Input 下拉框右侧的省略号按钮。从过滤器列表中选择“KML标记语言[KML]”, 然后从示例数据集中选择并打开"stream.kml",该数据集可从"Packt Publishing"网站上下载。

  4. 单击 Updata options 按钮加载对话框的其余部分。输出表名将填充为 "streams" ,并且将与输入文件的基本名称匹配。

  5. 设置以下选项,如下图所示:如 图 5.3

    • 选择 Source SRID 然后输入 "4326" 。 这是所有KML数据集的EPSG代码。

    • 选择 Target SRID 然后输入 "26910" 。 这是NAD83/UTM 10区北部的EPSG代码。

    • 选择 Create spatial index

  6. 请参阅以下截图,以确保设置匹配。请单击 OK 按钮导入文件。

_images/image318.jpg

图 5.3 KML导入设置

  1. 几分钟后,将显示导入已完成。要查看新创建的表,需要通过树中的选择面板 "GiffordPinochet.sqlite" 刷新tree, 然后单击 "Database" 下面的 Refresh ,或按键盘上的 f5 键。 现在将出现 "streams" 表,并在其旁边有多段线图标。

  2. 要预览属性表,请在信息面板上单击 "Table" 选项卡。要预览几何图形,请在信息面板上单击 Preview 选项卡。 要在QGIS桌面中查看新创建的SpatiaLite层,请右键单击 "Tree" 面板上的 streams ,然后 选择 Add to canvas

5.3.2. 将shapefile导入SpatiaLite

  1. 通过单击打开 "Database" 下面的 DB Manager 来打开 "DB Manager" ,打开 SpatiaLite 并 在 Tree 面板选择 "GiffordPinochet.sqlite" 。

  2. 导航到 Table ‣ Import layer/file 导入 "Import vector layer" 对话框,如 图 5.4

  3. 单击 Input 下拉框右侧的省略号按钮。从过滤器列表中选择 "ESRIshp文件", 然后从示例数据集中选择并打开 "NF_roads.shp" ,该数据集可从Packt Publishing网站上下载。

  4. 单击 Updata options 按钮加载对话框的其余部分。输出表名将填充为 "NF_roads" ,并将与输入文件的基本名称匹配。

  5. 设置以下选项:

  • 选择 Source SRID 然后输入 "26910" 。 这是NAD83/UTM区域 10北的EPSG代码。因为我们不想在导入期间更改坐标系, 所以不需要设置目标SRID。

  • 选择 创建空间索引

  1. 点击 OK 导入文件的按钮。

_images/image319.jpg

图 5.4 shapefile导入设置

  1. 几分钟后,将通知您导入已完成。要查看新创建的表,需要通过树中的选择面板 "GiffordPinochet.sqlite" 刷新tree, 然后单击数据库下面的“刷新”

  2. 要预览属性表,请在信息面板上单击 Table 选项卡。要预览几何图形,请在信息面板上单击 Preview 选项卡。 要在QGIS桌面中查看新创建的"SpatiaLite"层,请右键单击 "Tree" 面板上的 NF_roads ,然后 选择 Add to canvas

5.3.3. 将表导入SpatiaLite

要将表文件导入SpatiaLite数据库,请完成以下步骤:

  1. 通过单击打开 Database 下面的 "DB Manager" 来打开 DB Manager ,展开 SpatiaLite 并 在 Tree 面板选择 "GiffordPinochet.sqlite" 。

  2. 导航到 Table ‣ Import layer/file 导入 "Import vector layer" 对话框。

  3. 单击 Input 下拉框右侧的省略号按钮。从过滤器列表中选择MS Excel格式, 然后从可从Packt Publishing网站上下载的示例数据集中选择并打开 "Waterfalls.xls"。

  4. 点击 Update options 按钮加载对话框的其余部分。输出表名将填充为 "waterfalls" ,并且将与输入文件的基本名称匹配。 请注意,与空间数据集相关的所有选项都是不可修改的,并且是灰色的,如 图 5.5 。 这是因为SpatiaLite将输入存储在表中,也将其视为非空间表,我们将在后面的步骤中将空间组件添加到表中。

  5. 点击 OK 导入文件的按钮:

_images/image320.jpg

图 5.5 表导入SpatiaLite设置

  1. 几分钟后,系统将通知您导入已完成。 要查看新创建的表,您需要通过在 "Tree" 中选择 "GiffordPinochet.sqlite" 来 刷新 "Tree" 面板,然后单击 "Database" 下面的 Refresh ,或按键盘上的 f5 键。 现在将显示 "Waterfalls" 表,并在其旁边带有表图标。

  2. 选择 "Waterfalls" 图层。 单击信息面板上的 "Info" 选项卡。 注意北向和东向字段。 这些字段包含NAD 83 / UTM北部10区(EPSG 26910)中瀑布的坐标。 单击信息面板上的 Table 选项卡以查看表中的条目。 请注意,"Preview" 选项卡是不可选择的,因为选定的表没有任何几何字段。

此时,表导入已完成。但是,只要Waterfalls 表具有坐标对,因此可以将点几何列添加到表中,这实际上会将表转换为点层。 让我们现在开始::

  1. Tree 面板中选择 "Waterfalls" 表后,导航到 Table ‣ Edit Table 以打开表属性窗口。

  2. 点击 Add geometry column 按钮。在新窗口中,设置以下选项以匹配以下屏幕截图,然后单击 OK 要创建几何体字段, 请执行以下操作:

    • Name : geom (包含几何信息的字段的名称)

    • Type : POINT (字段将保存的几何图形类型)

    • 尺寸 : 2 (几何字段将为每个记录保留的维度(值)的数目;两个维度表示两个坐标( X ,。Y )为每个点存储,三维将包括 Z 坐标)

    • SRID : 26910 (空间参考标识:坐标参考系 ( CRS )几何字段的代码;CRS代码可以在 http://www.epsg-registry.org 。 对QGIS的重新审视在CRS上复习)

下图显示了正在创建的新几何图形列,该列将存储包含二维(坐标)的点几何图形,空间参考标识号为"26910", 表示NAD83 UTM Zone 10 North。如 图 5.6

_images/image321.jpg

图 5.6 新几何图形列

  1. 关闭表属性。要查看新编辑的表,需要通过树中的选择面板 "GiffordPinochet.sqlite" 刷新tree, 然后单击数据库下面的“刷新”。现在应显示waterfalls表,并在其旁边带有点图标。

现在 waterfalls 表有一个几何字段,我们需要用坐标填充它。我们将通过编写一个SQL 更新查询并使 用SpatiaLite MakePoint函数来完成此操作。为此,请执行以下步骤:

  1. 在 "Tree" 形视图中选择 "GiffordPinochet" ,单击 "Database" 下边的 SQL窗口 。你也可以按键盘上的 f2 。 这将打开SQL窗口作为 "DB Manager" 中的选项卡。

  2. 在SQL窗口中,单击 Clear 按钮清除 "SQL query" 文本区域。

  3. 在 "SQL查询" 文本区域中输入以下查询:

UPDATE Waterfalls

SET geom = MakePoint(Easting,Northing,26910);

让我们讨论一下MakePoint函数。

MakePoint(东距,北距,26910) 是一个空间函数,用于创建新的点几何对象。 "东方" 和 "北方"同一行中的列 是否保存 x 和 y 分别是坐标。 26910 是 x 和 y 坐标。

  1. 单击 Execute (F5) 按钮以执行查询。查询将不返回任何结果,但将指示 100行 受到影响。 这表明已用点几何填充了100行的几何字段。以下屏幕截图显示了该查询以及受影响的100行的指示,如 图 5.7

_images/image322.jpg

图 5.7 执行查询

  1. 在SQL窗口中,单击 Close 按钮关闭窗口。

  2. 要查看 "Waterfalls" 表,需要通过树中的选择面板 "GiffordPinochet.sqlite" 刷新tree, 然后单击数据库下面的“刷新” ,或按键盘上的 f5 键。

  3. 选择 "waterfalls" ,然后单击 Info 面板上的选项卡。在 SpatiaLite 信息打印输出的部分。 注意,将显示一条警告,说明尚未定义空间索引,如 图 5.8 。为了提高访问速度, 最好设置空间索引。点击 create it ,然后在弹出窗口中单击 Yes 按钮:

_images/image323.jpg

图 5.8 未设置空间索引

  1. 要预览属性表,请在信息面板上单击 Table 选项卡。要预览几何图形,请在信息面板上单击 Preview 选项卡。 要在QGIS桌面中查看新创建的SpatiaLite层,请右键单击 Tree 面板上的 "NF_roads" ,然后 选择 Add to canvas