15.2. 创建层

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

  • 从头开始清空图层

  • 现有层中的层

  • 剪贴板中的层

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

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

15.2.1. 创建新的矢量层

QGIS允许您以不同的格式创建新的层。它提供了创建GeoPackage、Shapefile、SpatiaLite、GPX格式和临时暂存层(又名内存层)的工具。创建一个 new GRASS layer 在GRASS插件中受支持。

15.2.1.1. 创建新的GeoPackage图层

To create a new GeoPackage layer, press the 新建GeoPackageLayer New GeoPackage Layer... button in the Layer ► Create Layer ► menu or from the Data Source Manager toolbar. The New GeoPackage Layer dialog will be displayed as shown in 图 15.18.

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

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

  1. 第一步是指示数据库文件的位置。这可以通过按下 ... 按钮右侧的 Database 字段并选择现有的GeoPackage文件或创建新文件。QGIS会自动为您提供的名称添加正确的扩展名。

  2. 为新图层/表指定名称 (Table name )

  3. 定义 Geometry type 。如果不是无几何图层,则可以指定它是否应该 Include Z dimension 和/或 Include M values

  4. 使用指定坐标参考系 集合投影 按钮

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

  1. 输入 Name 在赛场上

  2. 选择数据 Type 。支持的类型包括 Text dataWhole number (整型和整型64), Decimal numberDateDate and timeBinary (BLOB)Boolean

  3. 根据选定的数据格式,输入 Maximum length 价值观。

  4. 按下 新属性 Add to Fields List 按钮

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

  6. 一旦您对属性感到满意,请单击 OK 。QGIS会将新图层添加到图例中,您可以按照部分中的说明进行编辑 数字化现有图层

默认情况下,创建GeoPackage图层时,QGIS会生成 Feature id column 被呼叫 fid 它充当层的主键。名称可以更改。几何字段(如果可用)将命名为 geometry ,您可以选择 Create a spatial index 这就去。这些选项可以在 Advanced OptionsLayer identifier (层的人类可读的简短名称)和 Layer description

可使用对GeoPackage图层进行进一步管理 DB Manager

15.2.1.2. 创建新的shapefile图层

To create a new ESRI Shapefile format layer, press the 新的矢量层 New Shapefile Layer... button in the Layer ► Create Layer ► menu or from the Data Source Manager toolbar. The New Shapefile Layer dialog will be displayed as shown in 图 15.19.

  1. 属性提供路径和文件名。 ... 旁边的按钮 File name 。QGIS会自动为您提供的名称添加正确的扩展名。

  2. 接下来,指出 File encoding 数据中的

  3. 选择 Geometry type 层:无几何图形(导致 .DBF 格式化文件)、点、多点、线或面

  4. 指定几何图形是否应具有其他尺寸: NoneZ (+ M values)M values

  5. 使用指定坐标参考系 集合投影 按钮

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

图 15.19 创建新的shapefile图层对话框

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

  1. 输入 Name 在赛场上

  2. 选择数据 Type 。仅限 Decimal numberWhole numberText dataDate 支持属性。

  3. 根据选定的数据格式,输入 LengthPrecision

  4. 按下 新属性 Add to Fields List 按钮

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

  6. 一旦您对属性感到满意,请单击 OK 。QGIS会将新图层添加到图例中,您可以按照部分中的说明进行编辑 数字化现有图层

默认情况下,第一个整数 id 列已添加,但可以删除。

15.2.1.3. 创建新的SpatiaLite层

To create a new SpatiaLite layer, press the 新空间LiteLayer New SpatiaLite Layer... button in the Layer ► Create Layer ► menu or from the Data Source Manager toolbar. The New SpatiaLite Layer dialog will be displayed as shown in 图 15.20.

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

图 15.20 创建新的SpatiaLite层对话框

  1. 第一步是指示数据库文件的位置。这可以通过按下 ... 按钮右侧的 Database 字段并选择现有的SpatiaLite文件或创建新文件。QGIS会自动为您提供的名称添加正确的扩展名。

  2. 提供一个名称 (Layer name )用于新层

  3. 定义 Geometry type 。如果不是无几何图层,则可以指定它是否应该 Include Z dimension 和/或 Include M values

  4. 使用指定坐标参考系 集合投影 纽扣。

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

  1. 输入 Name 在赛场上

  2. 选择数据 Type 。支持的类型包括 Text dataWhole numberDecimal numberDateDate time

  3. 按下 新属性 Add to Fields List 按钮

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

  5. 一旦您对属性感到满意,请单击 OK 。QGIS会将新图层添加到图例中,您可以按照部分中的说明进行编辑 数字化现有图层

If desired, you can select 复选框 Create an autoincrementing primary key under the guilabel:Advanced Options section. You can also rename the Geometry column (geometry by default).

SpatiaLite图层的进一步管理可使用 DB Manager

15.2.1.4. 创建新的网格层

To create a new Mesh layer, press the 新网格层 New Mesh Layer... button in the Layer ► Create Layer ► menu or from the Data Source Manager toolbar. The New Mesh Layer dialog will be displayed as shown in 图 15.21.

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

图 15.21 创建新网格层对话框

  1. 第一步是指示网格文件的位置。这可以通过按下 ... 按钮右侧的 File name 字段,然后选择现有网格文件或创建新文件。

  2. 提供一个名称 (Layer name ),即该层在 Layers 嵌板

  3. 选择 File format :当前支持的网格文件格式有 2DM Mesh File (*.2dm)Selafin File (*.slf)UGRID (*.nc)

  4. 注明 Coordinate Reference System 要分配给数据集

  5. 以上步骤将生成一个空图层,之后您可以数字化折点并向其中添加数据集组。然而,也可以用现有的网格层初始化层,即用另一个层的顶点或面填充新层。要执行此操作,请执行以下操作:

    1. 检查 复选框 Initialize Mesh using

    2. 并选择一个 Mesh from the current projectMesh from a file 。将显示有关选定网格文件的信息以供检查。

    请注意,只有网格层的帧被传输到新层;它们的数据集不被复制。

15.2.1.5. 创建新的GPX层

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

  1. Select Create Layer ► 创建GPX New GPX Layer... from the Layer menu.

  2. 在对话框中,选择保存新文件的位置,为其命名,然后按 Save

  3. 将三个新层添加到 Layers Panel

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

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

    • 以及线层,用于跟踪接收器随时间的移动 (tracks 具有存储名称、符号、数字、注释、描述、源、URL、URL名称的字段。

  4. 现在,您可以按照部分中的说明编辑其中的任何一个 数字化现有图层

15.2.1.6. 创建新的临时临时图层

临时暂存层是内存中的层,这意味着它们不会保存在磁盘上,并且在关闭QGIS时将被丢弃。它们可以方便地存储临时需要的要素,或在地理处理操作期间用作中间层。

To create a new Temporary Scratch layer, choose the 创建内存 New Temporary Scratch Layer... entry in the Layer ► Create Layer ► menu or in the Data Source Manager toolbar. The New Temporary Scratch Layer dialog will be displayed as shown in 图 15.22. Then:

  1. 提供 Layer name

  2. 选择 Geometry type 。您可以在此处创建:

    • No geometry 类型层,作为简单的表,

    • PointMultiPoint 层,

    • LineString/CompoundCurveMultiLineString/MultiCurve 层,

    • Polygon/CurvePolygonMultiPolygon/MultiSurface 一层。

  3. 对于几何类型,指定数据集的尺寸:检查是否应 Include Z dimension 和/或 Include M values

  4. 使用指定坐标参考系 集合投影 纽扣。

  5. 向层中添加字段。请注意,与许多格式不同,可以在没有任何字段的情况下创建临时层。因此,此步骤是可选的。

    1. 输入 Name 在赛场上

    2. 选择数据 TypeTextWhole numberDecimal numberBooleanDateTimeDate & TimeBinary (BLOB) 是受支持的。

    3. 根据选定的数据格式,输入 LengthPrecision

    4. 按下 新属性 Add to Fields List 按钮

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

  6. 对设置满意后,请单击 OK 。QGIS会将新图层添加到 Layers 面板,您可以按照部分中所述进行编辑 数字化现有图层

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

图 15.22 创建新的临时临时图层对话框

您还可以使用剪贴板等创建预填充的临时临时图层(请参见 从剪贴板创建新层 )或由于 Processing algorithm

小技巧

Permanently store a memory layer on disk

为避免在关闭具有临时临时图层的项目时丢失数据,可以将这些图层保存为QGIS支持的任何矢量格式:

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

  • 选择 Make permanent 层上下文菜单中的条目;

  • 使用 Export ► 来自上下文菜单的条目或 Layer ► Save As... 菜单。

这些命令中的每一个都打开 Save Vector Layer as 对话框中描述的 从现有层创建新层 部分中的临时文件,保存的文件将替换 Layers 面板。

15.2.2. 从现有层创建新层

栅格和矢量图层均可使用以不同的格式保存和/或重新投影到不同的坐标系(CRS Layer ► Save As... 菜单或右键单击层 Layers panel 并选择:

  • Export ► Save As... 对于栅格层

  • Export ► Save Features As...Export ► Save Selected Features As... 对于矢量层。

  • 将图层从图层树拖放到中的PostGIS条目 Browser Panel 。请注意,您必须在中具有PostGIS连接 Browser Panel

15.2.2.1. 公共参数

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

  • File name :文件在磁盘上的位置。它可以引用输出层或存储层的容器(例如,类似数据库的格式,如GeoPackage、SpatiaLite或Open Document电子表格)。

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

  • Extent :限制要使用 extent_selector 小组件

  • Add saved file to map :将新层添加到画布

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

15.2.2.2. 栅格特定参数

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

  • Output mode (它可以是 raw datarendered image )

  • Format :导出到GDAL可以写入的任何栅格格式,如GeoTiff、GeoPackage、MBTiles、地理空间PDF、SAGA GIS二进制格网、Intergraph Raster、ESRI.hdr标签...

  • Resolution

  • Create Options :使用高级选项(文件压缩、块大小、色度...)在生成文件时,可以从 predefined create profiles 与输出格式相关或通过设置每个参数。

  • Pyramids 创作

  • VRT Tiles in case you opted to 复选框 Create VRT

  • No data values

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

图 15.23 另存为新栅格图层

15.2.2.3. 向量特定参数

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

  • Format :导出为GDAL可以写入的任何矢量格式,如GeoPackage、GML、ESRI Shapefile、AutoCAD DXF、ESRI FileGDB、MapInfo TAB或MIF、SpatiaLite、CSV、KML、ods等。

  • Layer name :在以下情况下可用 File name 指的是类似容器的格式,此条目表示输出层。

  • Encoding

  • Save only selected features

  • Select fields to export and their export options :提供使用自定义名称和 form widget 设置:

    • 检查下面的行 Name 列以选择要保留在输出层中的字段,或按 Select AllDeselect All 纽扣

    • 切换 Use aliases for exported name 复选框以填充 Export name 具有对应的字段别名的列,或重置为原始字段名称。双击单元格也会编辑名称。

    • 根据是否正在使用属性表单自定义小部件,您可以 Replace all selected raw field values by displayed values 。例如,如果一个 value map 微件应用于某个字段,则输出层将包含描述值而不是原始值。也可以在逐个字段的基础上进行替换, Replace with displayed values 纵队。

  • Persist layer metadata :确保任何层 metadata 源层中显示的内容将被复制和存储:

    • 在新创建的图层中,如果输出为GeoPackage格式

    • 作为一名 .qmd 文件和输出层,用于其他格式。请注意,基于文件的格式支持多个数据集(例如SpatiaLite、DXF等)可能有意想不到的行为。

  • Symbology export :可主要用于DXF导出和将OGR要素样式(见下文注释)管理为DXF、KML、TAB文件格式的所有文件格式:

    • No symbology :读取数据的应用程序的默认样式

    • Feature symbology :使用OGR要素样式保存样式(请参见下面的注释)

    • Symbol Layer symbology :使用OGR要素样式保存(请参见下面的注释),但如果使用了多个符号系统符号图层,则多次导出相同的几何

    • A Scale 值可应用于最新选项

备注

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

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

    • geometry type :设置为时保持要素的原始几何图形 Automatic ,否则将用任何类型移除或重写它。可以将空的几何图形列添加到属性表中,也可以删除空间图层的几何图形列。

    • Force multi-type :强制在层中创建多个几何图形要素。

    • Include z-dimension 致几何图形。

小技巧

通过覆盖层几何类型,可以执行保存无几何表等操作(例如 .csv 文件)转换为具有任何类型的几何图形(点、线、面)的shapefile,以便随后可以使用 添加部件 Add Part 工具。

  • Datasource OptionsLayer OptionsCustom Options 允许您根据输出格式配置高级参数。其中一些内容在 浏览数据格式和字段 但有关完整的详细信息,请参阅 GDAL 驱动程序文档。每种文件格式都有自己的自定义参数,例如 GeoJSON 格式请查看 GDAL GeoJSON 文件。

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

图 15.24 另存为新的矢量层

将向量层保存到现有文件时,根据输出格式(Geopackage、SpatiaLite、FileGDB...)的功能,用户可以决定是否:

  • 覆盖整个文件

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

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

  • 附加要素,添加新字段(如果有)。

对于ESRI shapefile、MapInfo.tag等格式,也可以使用Feature Append。

15.2.3. 创建新的DXF文件

除了 Save As... 该对话框提供将单个图层导出为另一种格式的选项,包括 *.DXF ,QGIS提供了另一种工具,可以将多个图层导出为单个DXF图层。它可以在 Project ► Import/Export ► Export Project to DXF... 菜单。

DXF Export 对话框:

  1. 提供目标文件。

  2. 选择符号系统模式和比例(请参阅 OGR Feature Styles 注),如适用。

  3. 选择数据 Encoding

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

  5. 选择要包含在DXF文件中的图层,方法是在表格微件中选中它们或自动从现有 map theme 。这个 Select AllDeselect All 按钮可以帮助快速设置要导出的数据。

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

您还可以选择执行以下操作:

  • 复选框 Use the layer title as name if set 而不是层名称本身;

  • 复选框 Export features intersecting the current map extent

  • 未选中 Force 2d output (eg. to support polyline width)

  • 复选框 Export label as MTEXT elements 或文本元素。

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

图 15.25 将项目导出为DXF对话框

15.2.4. 从剪贴板创建新层

剪贴板上的要素可以粘贴到新的层中。要执行此操作,请选择一些要素,将其复制到剪贴板,然后使用将其粘贴到新图层中 Edit ► Paste Features as ► 并选择:

  • New Vector Layer...Save vector layer as... 对话框出现(请参见 从现有层创建新层 对于参数)

  • Temporary Scratch Layer... :您需要提供该层的名称

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

备注

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

15.2.5. 创建虚拟层

虚拟层是一种特殊的矢量层。它允许您将一个层定义为SQL查询的结果,该查询涉及QGIS能够打开的任意数量的其他矢量层。虚拟层本身并不携带数据,可以将其视为视图。

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

  • 选择 添加虚拟层 Add/Edit Virtual Layer 条目中的 Layer ► Add Layer ► 菜单;

  • 启用 添加虚拟层 Add Virtual Layer 选项卡中的 Data Source Manager 对话框;

  • 或使用 DB Manager 对话框树。

该对话框允许您指定 Layer name 和一个SQL Query 。查询可以使用加载的矢量层的名称(或ID)作为表,也可以使用它们的字段名作为列。

例如,如果您有一个名为 airports ,您可以创建一个名为 public_airports 使用如下的SQL查询:

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

将执行SQL查询,而不考虑 airports 层,即使此提供程序不直接支持SQL查询。

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

图 15.26 创建虚拟层对话框

还可以创建联接和复杂查询,例如,用于联接机场和国家/地区信息:

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

备注

也可以使用的SQL窗口创建虚拟图层 数据库管理器插件

15.2.5.1. 嵌入在查询中使用的图层

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

要嵌入层,请单击 Add 并提供 Local nameProviderEncoding 以及通向 Source

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

15.2.5.2. 支持的查询语言

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

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

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

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

Functions of QGIS expressions 也可以在虚拟层查询中使用。

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

与纯SQL查询相反,虚拟层查询的所有字段都必须命名。别忘了使用 as 关键字来命名列(如果它们是计算或函数调用的结果)。

15.2.5.3. 性能问题

使用默认参数,虚拟层引擎将尽最大努力检测查询的不同列的类型,包括几何列的类型(如果存在)。

这是通过在可能的情况下内省查询或作为最后手段获取查询的第一行(限制1)来完成的。出于性能原因,仅仅为了创建层而获取结果的第一行可能是不可取的。

创建对话框参数:

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

  • No geometry :强制虚拟层忽略任何几何体字段。生成的层是仅属性层。

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

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

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

15.2.5.4. 特别评论

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

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

语法如下: /*:type*/ 。它必须放在列的名称之后。 type 可以是其中之一 int 对于整数, real 对于浮点数或 text

例如:

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

通过使用以下语法的特殊注释,还可以设置几何列的类型和坐标参考系 /*:gtype:srid*/ 哪里 gtype 是几何类型 (pointlinestringpolygonmultipointmultilinestringmultipolygon )和 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 与此空间索引语法结合使用时,将显著加快速度。