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) 在与此空间索引语法结合使用时会显著加快速度。