15.2. 创建图层
可以通过多种方式创建图层,包括:
从头创建空图层
从现有图层创建图层
从剪贴板创建图层
图层作为基于一个或多个图层的类似SQL查询的结果 (虚拟图层)
QGIS还提供了从/到不同格式导入/导出的工具。
15.2.1. 新建矢量图层
QGIS允许您创建不同格式的新图层。提供了用于创建地理包、形状文件、SpatiaLite、GPX格式和临时图层 (也称为内存图层) 的工具。GRASS插件支持创建 新的GRASS图层 。
15.2.1.1. 新建地理包图层
要新建地理包图层,请在 数据源管理器 工具栏点击 按钮。将显示 新建地理包图层 对话框,如 图 15.18 所示。
菜单或从第一步是选择数据库文件的位置。可以通过点击 数据库 字段右侧的 ... 按钮,然后选择现有或新建地理包文件。QGIS将自动为您提供的名称添加正确的扩展名。
为新图层/表命名 (表名称)
定义 几何图形类型 。如果不是无几何图形图层,可以指定是否应 包括Z维度 和/或 包括M值 。
要将字段添加到正在创建的图层,请执行以下操作:
输入字段的 名称
选择数据 类型 。支持的类型有 文本数据, 非负整数 (整数和64位整数), 小数, 日期 和 日期和时间, 二进制 (BLOB) 和 布尔型 。
根据选中的数据格式,输入值的 最大长度 。
为需要添加的每个字段重复上述步骤
设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。
默认情况下,在创建地理包图层时,QGIS会生成一个名为 fid
的 要素ID列 ,该列充当该图层的主键。名称可以更改。几何图形字段 (如果可用) 被命名为 几何图形
,您可以选择在其上 创建空间索引 。这些选项与 图层标识符 (图层的简短人类可读名称)和 图层描述 都位于 高级选项 。
可以使用 数据库管理器 对地理包图层进一步管理。
15.2.1.2. 新建形状文件图层
要新建ESRI形状文件格式图层,请在 数据源管理器 工具栏点击 按钮。将显示 新建形状文件图层 对话框,如 图 15.19 所示。
菜单或从使用 文件名 旁边的 ... 按钮选择路径和文件名。QGIS将自动为您提供的名称添加正确的扩展名。
接下来,选择数据的 文件编码
选择图层的 几何图形类型 :无几何图形 (生成
.DBF
格式文件)、点、点集、线或多边形指定几何图形是否应具有附加尺寸: 无, Z (+ M 值) 或 M值
要将字段添加到正在创建的图层,请执行以下操作:
输入字段的 名称
选择数据 类型 。仅支持 小数, 整数, 文本数据 和 日期 属性。
根据选中的数据格式,输入 长度 和 精度 。
为需要添加的每个字段重复上述步骤
设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。
默认将添加第一个整数 id
列,但可以将其移除。
15.2.1.3. 新建SpatiaLite图层
要新建SpatiaLite图层,请在 数据源管理器 工具栏点击 按钮。将显示 新建SpatiaLite图层 对话框,如 图 15.20 所示。
菜单或从第一步是选择数据库文件的位置。可以通过点击 数据库 字段右侧的 ... 按钮,然后选择现有或新建SpatiaLite文件。QGIS将自动为您提供的名称添加正确的扩展名。
为新建图层提供名称 (图层名)
定义 几何图形类型 。如果不是无几何图形图层,可以指定是否应 包括Z维度 和/或 包括M值 。
要将字段添加到正在创建的图层,请执行以下操作:
输入字段的 名称
选择数据 类型 。支持的类型有 文本数据, 整数, 小数, 日期 和 日期时间 。
为需要添加的每个字段重复上述步骤
设置满意的属性后,请单击 确定 按钮。QGIS将向图例添加新图层,您可以按照 数字化现有图层 中的说明对其进行编辑。
如果需要,可以在 guilabel:高级选项 部分选择 创建自增主键 。也可以重命名 几何图形列 (默认为 geometry
) 。
可以使用 数据库管理器 对SpatiaLite图层进一步管理。
15.2.1.4. 新建网孔图层
要新建网孔图层,请在 数据源管理器 工具栏点击 按钮。将显示 新建网孔图层 对话框,如 图 15.21 所示。
菜单或从第一步是选择网孔文件的位置。可以通过点击 文件名 字段右侧的 ... 按钮,然后选择现有或新建网孔文件。
提供名称 (文件名), 即图层在 图层 面板显示的名称
选择 文件格式: 目前支持的网孔文件格式有
2DM网孔文件 (*.2dm)
,Selafin文件 (*.slf)
和UGRID (*.nc)
。选择指定给数据集的 坐标参照系
上述步骤将生成一个空图层,随后可以数字化顶点并向其添加数据集组。但是,也可以使用现有网孔图层初始化该图层,即使用其他网孔图层的顶点或面填充新图层。为此:
请注意,只有网孔图层的框架被转移到新图层,不会复制其数据集。
15.2.1.5. 新建GPX图层
要创建新的GPX文件,请执行以下操作:
- 菜单选择
在对话框中,选择保存新文件的位置,为其命名并点击 保存 按钮。
图层面板 添加了三个新图层:
用于数字化位置 (
waypoints
) 的点图层,其字段存储名称、高程、注释、描述、源、URL和URL名称用于数字化构成计划路径 (
routes
) 的位置序列的线图层,其字段存储名称、符号、数字、注释、描述、源、URL、URL名称用于跟踪接收器随时间的移动 (
tracks
) 的线图层,其中字段存储名称、符号、数字、注释、描述、源、URL、URL名称
现在,可以按照 数字化现有图层 所述编辑其中任一图层。
15.2.1.6. 新建临时图层
临时图层是内存中的图层,其数据不会保存在磁盘上,并且QGIS关闭时将被丢弃。可用于存储临时需要的要素,或者在地理处理操作期间作为中间图层。
要新建临时图层,请在 数据源管理器 工具栏选择 按钮。将显示 新建临时图层 对话框,如 图 15.22 所示。然后:
菜单或在提供 图层名
选择 几何图形类型 。在此您可以创建:
没有几何图形
类型图层,作为简单表点
或点集
图层线串/复合曲线
或线串集/曲线集
图层多边形/曲线多边形
或多边形集/表面集
图层
对于几何类型,指定数据集的维度:检查是否应 包括Z维度 和/或 包括M值
将字段添加到图层。请注意,与许多其他格式不同,可以在不使用任何字段的情况下创建临时图层。因此,此步骤是可选的。
对设置感到满意后,请单击 确定 。QGIS将新图层添加到 图层 面板,您可以按照 数字化现有图层 中的说明对其进行编辑。
也可以使用例如剪贴板 (请参阅 从剪贴板创建新图层) 或作为 处理算法 的结果创建预填充的临时图层。
小技巧
将内存图层永久储存在磁盘
为了避免在关闭带有临时图层的工程时丢失数据,可以将这些图层保存为QGIS支持的矢量格式:
上述每条命令都会打开在 从现有图层创建新图层 章节所描述的 矢量图层另存为 对话框,并且保存的文件将替换 图层 面板中的临时文件。
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 等
分辨率
创建选项: 生成文件时使用高级选项 (文件压缩、块大小、色度等),可以与输出格式有关的从 预定义创建配置文件 或设置每个参数。
金字塔 创建
无数据值
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-维度 至几何图形。
数据源选项, 图层选项 或 自定义选项 允许根据输出格式配置高级参数。有些在 探索数据格式与字段 中进行了描述,但有关详细信息,请参阅 GDAL 驱动文档。每个文件格式都有自己的自定义参数,例如,对于
GeoJSON
格式,请查看 GDAL GeoJSON 文档。
将矢量图层保存到现有文件中时,根据输出格式 (地理包、SpatiaLite、FileGDB等) 的功能,用户可以决定是否:
盖写整个文件
仅盖写目标图层 (图层名称可配置)
将要素追加到现有目标图层
追加要素,添加新字段 (如果有的话)
对于ESRI形状文件、MapInfo .tab 等格式,也可以使用要素追加。
15.2.3. 新建DXF文件
除了 另存为... 对话框提供将单图层导出为其他格式 ( *.DXF
) 的选项外,QGIS还提供了另一个将多个图层导出为单个DXF图层的工具。可以在 菜单进行访问。
在 DXF导出 对话框:
提供目标文件。
如果适用,请选择符号模式和比例 (请参阅 OGR要素样式 备注)。
选择数据 编码 。
选择要应用的 CRS: 所选图层将被重投影到给定CRS。
选择要包含在DXF文件中的图层,方法是在表控件检索图层,或从现有 地图主题 中自动选取图层。 全选 和 取消全选 按钮有助于快速设置要导出的数据。
对于每个图层,可以选择导出单个DXF图层中的所有要素,或依赖于其值用于在DXF输出中将要素拆分为图层的字段。
也可以选择:
15.2.4. 从剪贴板创建新图层
剪贴板的要素可以粘贴到新图层。为此,请选择一些要素,复制到剪贴板,然后使用
将其粘贴到新图层,并选择:新建矢量图层...: 显示 矢量图层另存为... 对话框(有关参数请参阅 从现有图层创建新图层)
或 临时图层...: 需要为图层提供名称
将创建新图层,填充选中的要素及其属性 (并将其添加到地图画布)。
备注
对于在QGIS中选择和复制的要素以及来自其他应用程序的要素,只要它们的几何图形是使用熟知文本 (WKT) 定义的,就可以从剪贴板创建图层。
15.2.5. 创建虚拟图层
虚拟图层是一种特殊的矢量图层类型。允许将图层定义为涉及QGIS可以打开许多其他矢量图层的SQL查询的结果。虚拟图层本身不携带数据,可以看作视图。
要创建虚拟图层,请通过以下方式打开虚拟图层创建对话框:
该对话框允许您指定 图层名 和SQL 查询 。查询可以使用加载的矢量图层的名称 (或ID) 作为表,也可以将其字段名称用作列。
例如,如果您有一个名为 airports
的图层,可以使用如下SQL查询新建名为 public_airports
的虚拟图层:
SELECT *
FROM airports
WHERE USE = "Civilian/Public"
SQL查询将被执行,而与 airports
图层的底层提供程序无关,即使该提供程序不直接支持SQL查询也是如此。
还可以创建连接和复杂查询,例如,连接 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
) 在与此空间索引语法结合使用时会显著加快速度。