15.2. 创建图层

可以通过多种方式创建图层,包括:

  • 从头创建空图层

  • 从现有图层创建图层

  • 从剪贴板创建图层

  • 图层作为基于一个或多个图层的类似SQL查询的结果 (虚拟图层)

QGIS还提供了从/到不同格式导入/导出的工具。

15.2.1. 新建矢量图层

QGIS允许您创建不同格式的新图层。提供了用于创建地理包、形状文件、SpatiaLite、GPX格式和临时图层 (也称为内存图层) 的工具。GRASS插件支持创建 新的GRASS图层

15.2.1.1. 新建地理包图层

要新建地理包图层,请在 图层 ► 创建图层 ► 菜单或从 数据源管理器 工具栏点击 newGeoPackageLayer 新建地理包图层... 按钮。将显示 新建地理包图层 对话框,如 图 15.18 所示。

../../../_images/editNewGeoPackage.png

图 15.18 新建地理包图层对话框

  1. 第一步是选择数据库文件的位置。可以通过点击 数据库 字段右侧的 ... 按钮,然后选择现有或新建地理包文件。QGIS将自动为您提供的名称添加正确的扩展名。

  2. 为新图层/表命名 (表名称)

  3. 定义 几何图形类型 。如果不是无几何图形图层,可以指定是否应 包括Z维度 和/或 包括M值

  4. 使用 setProjection 按钮指定坐标参照系

要将字段添加到正在创建的图层,请执行以下操作:

  1. 输入字段的 名称

  2. 选择数据 类型 。支持的类型有 文本数据, 非负整数 (整数和64位整数), 小数, 日期日期和时间, 二进制 (BLOB)布尔型

  3. 根据选中的数据格式,输入值的 最大长度

  4. 单击 newAttribute 添加到字段列表 按钮

  5. 为需要添加的每个字段重复上述步骤

  6. 设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。

默认情况下,在创建地理包图层时,QGIS会生成一个名为 fid要素ID列 ,该列充当该图层的主键。名称可以更改。几何图形字段 (如果可用) 被命名为 几何图形 ,您可以选择在其上 创建空间索引 。这些选项与 图层标识符 (图层的简短人类可读名称)和 图层描述 都位于 高级选项

可以使用 数据库管理器 对地理包图层进一步管理。

15.2.1.2. 新建形状文件图层

要新建ESRI形状文件格式图层,请在 图层 ► 创建图层 ► 菜单或从 数据源管理器 工具栏点击 newVectorLayer 新建形状文件图层... 按钮。将显示 新建形状文件图层 对话框,如 图 15.19 所示。

  1. 使用 文件名 旁边的 ... 按钮选择路径和文件名。QGIS将自动为您提供的名称添加正确的扩展名。

  2. 接下来,选择数据的 文件编码

  3. 选择图层的 几何图形类型 :无几何图形 (生成 .DBF 格式文件)、点、点集、线或多边形

  4. 指定几何图形是否应具有附加尺寸: , Z (+ M 值)M值

  5. 使用 setProjection 按钮指定坐标参照系

../../../_images/editNewVector.png

图 15.19 新建形状文件图层对话框

要将字段添加到正在创建的图层,请执行以下操作:

  1. 输入字段的 名称

  2. 选择数据 类型 。仅支持 小数, 整数, 文本数据日期 属性。

  3. 根据选中的数据格式,输入 长度精度

  4. 单击 newAttribute 添加到字段列表 按钮

  5. 为需要添加的每个字段重复上述步骤

  6. 设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。

默认将添加第一个整数 id 列,但可以将其移除。

15.2.1.3. 新建SpatiaLite图层

要新建SpatiaLite图层,请在 图层 ► 创建图层 ► 菜单或从 数据源管理器 工具栏点击 newSpatiaLiteLayer 新建SpatiaLite图层... 按钮。将显示 新建SpatiaLite图层 对话框,如 图 15.20 所示。

../../../_images/editNewSpatialite.png

图 15.20 新建SpatiaLite图层对话框

  1. 第一步是选择数据库文件的位置。可以通过点击 数据库 字段右侧的 ... 按钮,然后选择现有或新建SpatiaLite文件。QGIS将自动为您提供的名称添加正确的扩展名。

  2. 为新建图层提供名称 (图层名)

  3. 定义 几何图形类型 。如果不是无几何图形图层,可以指定是否应 包括Z维度 和/或 包括M值

  4. 使用 setProjection 按钮指定坐标参照系。

要将字段添加到正在创建的图层,请执行以下操作:

  1. 输入字段的 名称

  2. 选择数据 类型 。支持的类型有 文本数据, 整数, 小数, 日期日期时间

  3. 单击 newAttribute 添加到字段列表 按钮

  4. 为需要添加的每个字段重复上述步骤

  5. 设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。

如果需要,可以在 guilabel:高级选项 部分选择 checkbox 创建自增主键 。也可以重命名 几何图形列 (默认为 geometry) 。

可以使用 数据库管理器 对SpatiaLite图层进一步管理。

15.2.1.4. 新建网孔图层

要新建网孔图层,请在 图层 ► 创建图层 ► 菜单或从 数据源管理器 工具栏点击 newMeshLayer 新建网孔图层... 按钮。将显示 新建网孔图层 对话框,如 图 15.21 所示。

../../../_images/editNewMesh.png

图 15.21 新建网孔图层对话框

  1. 第一步是选择网孔文件的位置。可以通过点击 文件名 字段右侧的 ... 按钮,然后选择现有或新建网孔文件。

  2. 提供名称 (文件名), 即图层在 图层 面板显示的名称

  3. 选择 文件格式: 目前支持的网孔文件格式有 2DM网孔文件 (*.2dm), Selafin文件 (*.slf)UGRID (*.nc)

  4. 选择指定给数据集的 坐标参照系

  5. 上述步骤将生成一个空图层,随后可以数字化顶点并向其添加数据集组。但是,也可以使用现有网孔图层初始化该图层,即使用其他网孔图层的顶点或面填充新图层。为此:

    1. 勾选 checkbox 使用如下数据初始化网孔

    2. 然后选择 来自当前工程的网孔来自文件的网孔 。将显示选中网孔文件的信息以进行检查。

    请注意,只有网孔图层的框架被转移到新图层,不会复制其数据集。

15.2.1.5. 新建GPX图层

要创建新的GPX文件,请执行以下操作:

  1. 图层 菜单选择 创建图层 ► createGPX 新建GPX图层...

  2. 在对话框中,选择保存新文件的位置,为其命名并点击 保存 按钮。

  3. 图层面板 添加了三个新图层:

    • 用于数字化位置 (waypoints) 的点图层,其字段存储名称、高程、注释、描述、源、URL和URL名称

    • 用于数字化构成计划路径 (routes) 的位置序列的线图层,其字段存储名称、符号、数字、注释、描述、源、URL、URL名称

    • 用于跟踪接收器随时间的移动 (tracks) 的线图层,其中字段存储名称、符号、数字、注释、描述、源、URL、URL名称

  4. 现在,可以按照 数字化现有图层 所述编辑其中任一图层。

15.2.1.6. 新建临时图层

临时图层是内存中的图层,其数据不会保存在磁盘上,并且QGIS关闭时将被丢弃。可用于存储临时需要的要素,或者在地理处理操作期间作为中间图层。

要新建临时图层,请在 图层 ► 创建图层 ► 菜单或在 数据源管理器 工具栏选择 createMemory 新建临时图层... 按钮。将显示 新建临时图层 对话框,如 图 15.22 所示。然后:

  1. 提供 图层名

  2. 选择 几何图形类型 。在此您可以创建:

    • 没有几何图形 类型图层,作为简单表

    • 点集 图层

    • 线串/复合曲线线串集/曲线集 图层

    • 多边形/曲线多边形多边形集/表面集 图层

  3. 对于几何类型,指定数据集的维度:检查是否应 包括Z维度 和/或 包括M值

  4. 使用 setProjection 按钮指定坐标参照系。

  5. 将字段添加到图层。请注意,与许多其他格式不同,可以在不使用任何字段的情况下创建临时图层。因此,此步骤是可选的。

    1. 输入字段的 名称

    2. 选择数据 类型: 文本, 整数, 小数, 布尔, 日期, 时间, 日期和时间二进制 (BLOB)

    3. 根据选中的数据格式,输入 长度精度

    4. 单击 newAttribute 添加到字段列表 按钮

    5. 对需要添加的每个字段重复上述步骤

  6. 对设置感到满意后,请单击 确定 。QGIS将新图层添加到 图层 面板,您可以按照 数字化现有图层 中的说明对其进行编辑。

../../../_images/editNewTemporaryLayer.png

图 15.22 新建临时图层对话框

也可以使用例如剪贴板 (请参阅 从剪贴板创建新图层) 或作为 处理算法 的结果创建预填充的临时图层。

小技巧

将内存图层永久储存在磁盘

为了避免在关闭带有临时图层的工程时丢失数据,可以将这些图层保存为QGIS支持的矢量格式:

  • 单击图层旁边的 indicatorMemory 指示器图标;

  • 在图层上下文菜单中选择 永久化 条目;

  • 使用上下文菜单中的 导出 ► 条目或 图层 ► 另存为... 菜单。

上述每条命令都会打开在 从现有图层创建新图层 章节所描述的 矢量图层另存为 对话框,并且保存的文件将替换 图层 面板中的临时文件。

15.2.2. 从现有图层创建新图层

栅格和矢量图层都可以保存为不同的格式,和/或使用 图层 ► 另存为... 菜单或在 图层面板 右键单击重投影到不同的坐标参照系 (CRS),然后选择:

  • 导出 ► 另存为... 用于栅格图层

  • 导出 ► 要素另存为...导出 ► 选中的要素另存为... 用于矢量图层。

  • 将图层从图层树拖放到 浏览器面板 中的PostGIS条目。请注意, 浏览器面板 中必须有PostGIS连接。

15.2.2.1. 常用参数

保存图层为... 对话框显示了几个参数,用于在保存图层时更改行为。栅格和矢量常见参数包括:

  • 文件名: 文件在磁盘的位置。可以是输出图层或存储该图层的容器 (例如类似数据库格式,如地理包、SpatiaLite或开放文档电子表格)。

  • CRS: 可以更改以重投影数据

  • 范围: 使用 extent_selector 控件限制要导出的输入范围

  • 将已保存的文件添加到地图中: 将新图层添加到画布

但是,有些参数特定于栅格和矢量格式:

15.2.2.2. 栅格特定参数

根据导出的格式,其中某些选项可能不可用:

  • 输出模式 (可以是 原始数据渲染图像)

  • 格式: 导出为GDAL可以写入的栅格格式,如GeoTiff、地理包、MBTile、地理空间PDF、SAGA GIS 二进制网格、Intergraph栅格、ESRI .hdr Labeled 等

  • 分辨率

  • 创建选项: 生成文件时使用高级选项 (文件压缩、块大小、色度等),可以与输出格式有关的从 预定义创建配置文件 或设置每个参数。

  • 金字塔 创建

  • 如果您勾选了 checkbox 创建VRT ,请设置 VRT瓦片

  • 无数据值

../../../_images/saveasraster.png

图 15.23 另存为新栅格图层

15.2.2.3. 矢量特定参数

根据导出的格式,可能会提供以下一些选项:

  • 格式: 导出到GDAL可以写入的矢量格式,如地理包、GML、ESRI形状文件、AutoCAD DXF、ESRI FileGDB、Mapinfo TAB 或 MIF、SpatiaLite、CSV、KML、ODS等。

  • 图层名: 当 文件名 涉及类似容器格式时可用,此条目表示输出图层。

  • 编码

  • 仅保存选中的要素

  • 选择要导出的字段以及导出选项: 提供了导出具有自定义名称和 表单控件 设置字段的方法:

    • 勾选 名称 列下面的行以选择要保留在输出图层中的字段,或点击 全选取消全选 按钮

    • 切换 为导出名称使用别名 复选框,以使用相应的字段别名填充 导出名称 列,或重置为原始字段名称。双击单元格也可以编辑名称。

    • 根据是否使用属性表单自定义控件,可以 以显示值取代所有选中的原始字段值 。例如,如果将 值映射 控件应用于字段,则输出图层将包含描述值,而不是原始值。也可以在 以显示值取代之 列中逐个字段完成替换。

  • 保留图层元数据: 确保复制并存储源图层中存在的所有图层 元数据

    • 在新创建的图层中,如果输出为地理包格式。

    • 作为 .qmd 文件以及输出图层,用于其他格式。请注意,支持多个数据集的基于文件的格式 (例如SpatiaLite、DXF等) 可能会出现意外行为。

  • 导出符号: 主要用于DXF导出,也可用于管理OGR要素样式 (请参阅如下备注) 的所有文档格式,如DXF、KML,TAB文件格式:

    • 无符号: 读取数据所应用的默认样式

    • 要素符号: 使用OGR要素样式保存样式 (请参阅如下备注)

    • 符号图层符号化: 使用OGR要素样式保存 (请参阅如下备注),但如果使用了多个符号化符号图层,则多次导出相同的几何图形

    • 比例 值可以应用于最新选项

备注

OGR要素样式 是将样式作为隐藏属性直接储存在数据中的方法。只有某些格式可以处理此类信息。KML、DXF和TAB文件格式就是这样的格式。有关高级详细信息,请阅读 OGR要素样式规范 文档。

  • 几何图形: 可以配置输出图层的几何图形功能

    • 几何图形类型: 当设置为 自动 时,保留要素的原始几何图形,否则将使用其它类型移除或覆盖。可以将空几何图形列添加到属性表,并移除空间图层的几何图形列。

    • 强制为类型集: 强制在图层中创建几何图形集要素。

    • 包括Z-维度 至几何图形。

小技巧

通过覆盖图层几何图形类型,可以将无几何图形表 (例如 .csv 文件) 保存到具有任何类型几何图形 (点、线、多边形) 的形状文件中,以便使用 addPart 添加部件 工具手动将几何图形添加到行。

  • 数据源选项, 图层选项自定义选项 允许根据输出格式配置高级参数。有些在 探索数据格式与字段 中进行了描述,但有关详细信息,请参阅 GDAL 驱动文档。每个文件格式都有自己的自定义参数,例如,对于 GeoJSON 格式,请查看 GDAL GeoJSON 文档。

../../../_images/saveasvector.png

图 15.24 另存为新矢量图层

将矢量图层保存到现有文件中时,根据输出格式 (地理包、SpatiaLite、FileGDB等) 的功能,用户可以决定是否:

  • 盖写整个文件

  • 仅盖写目标图层 (图层名称可配置)

  • 将要素追加到现有目标图层

  • 追加要素,添加新字段 (如果有的话)

对于ESRI形状文件、MapInfo .tab 等格式,也可以使用要素追加。

15.2.3. 新建DXF文件

除了 另存为... 对话框提供将单图层导出为其他格式 ( *.DXF) 的选项外,QGIS还提供了另一个将多个图层导出为单个DXF图层的工具。可以在 工程 ► 导入/导出 ► 导出工程为DXF文件... 菜单进行访问。

DXF导出 对话框:

  1. 提供目标文件。

  2. 如果适用,请选择符号模式和比例 (请参阅 OGR要素样式 备注)。

  3. 选择数据 编码

  4. 选择要应用的 CRS: 所选图层将被重投影到给定CRS。

  5. 选择要包含在DXF文件中的图层,方法是在表控件检索图层,或从现有 地图主题 中自动选取图层。 全选取消全选 按钮有助于快速设置要导出的数据。

    对于每个图层,可以选择导出单个DXF图层中的所有要素,或依赖于其值用于在DXF输出中将要素拆分为图层的字段。

也可以选择:

  • checkbox 如果已设置,将使用图层标题作为名称 而不是图层名称本身

  • checkbox 导出与当前地图范围相交的要素

  • unchecked 强制2D输出 (例如: 为支持折线宽度)

  • checkbox 将标注导出为MTEXT元素 或TEXT元素

../../../_images/export_dxf.png

图 15.25 将工程导出到DXF对话框

15.2.4. 从剪贴板创建新图层

剪贴板的要素可以粘贴到新图层。为此,请选择一些要素,复制到剪贴板,然后使用 编辑 ► 粘贴要素为 ► 将其粘贴到新图层,并选择:

  • 新建矢量图层...: 显示 矢量图层另存为... 对话框(有关参数请参阅 从现有图层创建新图层)

  • 临时图层...: 需要为图层提供名称

将创建新图层,填充选中的要素及其属性 (并将其添加到地图画布)。

备注

对于在QGIS中选择和复制的要素以及来自其他应用程序的要素,只要它们的几何图形是使用熟知文本 (WKT) 定义的,就可以从剪贴板创建图层。

15.2.5. 创建虚拟图层

虚拟图层是一种特殊的矢量图层类型。允许将图层定义为涉及QGIS可以打开许多其他矢量图层的SQL查询的结果。虚拟图层本身不携带数据,可以看作视图。

要创建虚拟图层,请通过以下方式打开虚拟图层创建对话框:

  • 图层 ► 添加图层 ► 菜单中选择 addVirtualLayer 添加/编辑虚拟图层

  • 数据源管理器 对话框中启用 addVirtualLayer 添加虚拟图层 选项卡;

  • 或使用 数据库管理器 对话框树。

该对话框允许您指定 图层名 和SQL 查询 。查询可以使用加载的矢量图层的名称 (或ID) 作为表,也可以将其字段名称用作列。

例如,如果您有一个名为 airports 的图层,可以使用如下SQL查询新建名为 public_airports 的虚拟图层:

SELECT *
FROM airports
WHERE USE = "Civilian/Public"

SQL查询将被执行,而与 airports 图层的底层提供程序无关,即使该提供程序不直接支持SQL查询也是如此。

../../../_images/create_virtual_layers.png

图 15.26 创建虚拟图层对话框

还可以创建连接和复杂查询,例如,连接 airports 和 country 信息:

SELECT airports.*, country.population
FROM airports
JOIN country
ON airports.country = country.name

备注

也可以使用 DB Manager Plugin 的SQL窗口创建虚拟图层。

15.2.5.1. 嵌入用于查询的图层

除了地图画布中可用的矢量图层外,用户还可以将图层添加到 嵌入式图层 列表,该列表可以在查询中使用,而无需将其显示在地图画布或图层面板。

若要嵌入图层,请单击 添加 ,然后提供 本地名称, 提供程序, 编码 路径。

导入 按钮允许将地图画布中的图层添加到嵌入式图层列表。然后可以从图层面板移除这些图层,而不会中断现有查询。

15.2.5.2. 支持的查询语言

底层引擎使用SQLite和SpatiaLite进行操作。

这意味着可以使用您本地安装的SQLite所理解的所有SQL。

SQLite中的函数和SpatiaLite中的空间函数也可以用于虚拟图层查询。例如,可以使用类似于以下内容的查询仅从属性图层创建点图层:

SELECT id, MakePoint(x, y, 4326) as geometry
FROM coordinates

QGIS表达式的函数 也可以在虚拟图层查询中使用。

要引用图层的几何图形列,请使用名称 geometry

与纯粹的SQL查询相反,必须命名虚拟图层查询的所有字段。如果列是计算或函数调用的结果,请不要忘记使用 as 关键字命名。

15.2.5.3. 性能问题

使用默认参数时,虚拟图层引擎将尝试检测查询的不同列的类型,包括几何图形列的类型 (如果存在)。

这是通过尽可能使用内省查询或作为最后手段获取查询的第一行 (LIMIT 1) 来完成的。出于性能原因,仅仅为了创建图层而获取结果的第一行或许是不可取的。

创建对话框参数:

  • 唯一标识符列: 指定查询的字段,该字段表示QGIS可用作行标识符的唯一整数值。默认使用自动递增的整数值。定义唯一标识符列可以加快按ID选择行的速度。

  • 无几何图形: 强制虚拟图层忽略任何几何图形字段。生成的图层为仅包含属性的图层。

  • 几何图形 : 指定几何图形列的名称。

  • 几何图形 类型: 指定几何图形的类型。

  • 几何图形 CRS: 指定虚拟图层的坐标参照系。

15.2.5.4. 特殊注释

虚拟图层引擎尝试确定查询每列的类型。如果失败,将提取查询的第一行以确定列类型。

通过使用一些特殊注释,可以直接在查询中指定特定列的类型。

语法如: /*:type*/ 。必须放置在列名称之后。对于整数 类型 可以是 整型 ,而浮点数可以是 实数文本

例如:

SELECT id+1 as nid /*:int*/
FROM table

几何图形列的类型和坐标参照系也可以通过以下语法 /*:gtype:srid*/ 的特殊注释进行设置,其中 gtype 是几何图形类型类型 (, 线串, 多边形, 点集, 线串集多边形集) , srid 是表示坐标参照系的EPSG代码的整数。

15.2.5.5. 索引的使用

当通过虚拟图层查询图层时,源图层索引将按以下方式使用:

  • 如果在图层的主键列上使用 = 谓词,将要求底层数据提供程序提供特定的ID (FilterFid)

  • 对于任何其他谓词 (>, <=, != 等) 或没有主键的列,将使用从表达式构建的请求来请求底层矢量数据提供程序。这意味着索引可以在数据库提供程序上使用 (如果存在)。

存在一种特定的语法来处理请求中的空间谓词,并触发空间索引的使用:每个虚拟图层都存在一个名为 _search_frame_ 的隐藏列。可以将此列与边界框进行相等比较。如下示例:

SELECT *
FROM vtab
WHERE _search_frame_=BuildMbr(-2.10,49.38,-1.3,49.99,4326)

空间二进制谓词 (如 ST_Intersects) 在与此空间索引语法结合使用时会显著加快速度。