使用处理框架进行批次处理 (QGIS3)

QGIS中的 处理框架 在QGIS中提供了一个运行本机和第三方算法来处理数据的环境。它包含一个不错的批处理界面,使您可以轻松地在多个层上执行算法。批处理是一个有用的工具,可以节省手动工作并帮助您自动执行重复性任务。

内容说明

我们将采用几个全局矢量层,并在单个批处理命令中将它们裁剪到非洲范围。

你还会学到这些

  • 创建 Filter 可以从图层中删除不需要的功能,而无需创建新图层。

  • 将多个图层合并到一个Geopackage文件中。

获取资料

Natural Earth 可以载到以下几个向量图层

为了方便起见,你也可以直接用下面的连结下载包含此图层的地理数据集:

ne_global.gpkg

资料来源 [NATURALEARTH]

操作流程

  1. 在QGIS浏览器面板中,找到保存下载数据的目录。展开 zipgpkg 条目,然后选择 ne_10m_admin_0_countries 层。将图层拖到画布上。

../../_images/116.png
  1. 您将在图层面板中看到加载的图层。由于我们的任务是将全球图层裁剪到非洲边界,因此我们需要首先准备一个仅包含该大陆要素的图层。让我们看一下属性表,看看可以使用哪个列查询属于特定大陆的要素。右键单击 ne_10m_admin_0_countries 层,然后选择 Open Attribute Table

注解

提示:您也可以使用键盘快捷键 F6 打开所选图层的属性表。

../../_images/215.png
  1. Attribute Table 窗口中,当您水平滚动时,您会看到数据包含名为 CONTINENT 的属性。我们可以使用该属性来过滤特征。

../../_images/313.png
  1. 关闭属性表并返回到QGIS主窗口。右键点击 ne_10m_admin_0_countries 图层,然后选择 Filter

../../_images/45.png
  1. Query Builder 窗口中,选择 CONTINENT 字段,然后单击 Sample 。这将使用要素中该属性的值的子集填充 Values 面板。此步骤对于了解数据集中存在哪些类型的值很有用。我们可以看到我们的数据集包含一个名为 Africa 的值。

../../_images/55.png
  1. 现在,在提供商特定 Provider specific filter expression 。您可以点击 CONTINENT 标签,然后点击 = 按钮和 Africa 标签。或者,您可以在文本框中键入以下表达式。输入表达式后,单击 OK

"CONTINENT" = 'Africa'
../../_images/65.png
  1. 您将看到地图画布现在仅包含来自非洲的国家。请注意图层名称旁边的过滤器图标,指示该图层已应用该过滤器。如果要查看和使用图层中的所有要素,可以单击过滤器图标并清除表达式。现在,我们将保留过滤器,以便将其他图层裁剪到非洲。

../../_images/75.png
  1. 现在,我们准备运行批处理来裁剪图层。在 QGIS Browser 面板中找到自然地球全局层 ne_10m_railroadsne_10m_portsne_10m_urban_areas 。按住 Ctrl 键,然后单击每个图层以选择它们。选定后,将它们拖到画布上。

../../_images/85.png
  1. 加载图层后,您会注意到它们是全局图层,并且具有跨越所有国家的要素。现在,是时候开始我们的批处理剪辑过程了,以将这些图层剪辑到非洲。打开 Processing ‣ Toolbox

../../_images/95.png
  1. 浏览所有可用算法,然后从 Vector overlay ‣ Clip 中找到 Clip 工具。您也可以使用 Search 来轻松找到算法。

../../_images/105.png
  1. 右键单击 Clip 算法,然后选择 Execute as Batch Process

../../_images/117.png
  1. Batch Processing 对话框中,第一个选项卡是 Parameters ,我们在其中定义输入。表中的每一行代表1个处理任务。点击 Click Add row 。由于我们的任务涉及3层,因此添加3行。

../../_images/125.png
  1. Input layers 列的第一行旁边点击 。 选择 Select from Open Layers

../../_images/135.png
  1. Multiple selection 对话框中,选中我们要裁剪的3层,然后单击 OK

../../_images/145.png
  1. 您会注意到 Input layer 列将自动填充您选择的所有层。接下来,我们需要选择包含边界的图层以裁剪输入图层。在 Overlay layer 列下的第一行中,点击 按钮,然后选择 Select form Open Layers

../../_images/155.png
  1. Multiple selection 对话框中,选中 ne_10m_admin_0_countries ,然后单击 OK

../../_images/165.png
  1. 由于剪辑层对于我们所有的输入都是相同的,所以方便的快捷方式是双击列标题 Overlay layer ,并且所有行将自动填充相同的层。

../../_images/175.png
  1. 接下来,我们需要定义输出。在 Clipped 列的第一行旁边点击 按钮。

../../_images/184.png
  1. 浏览到你想要储存输出档的资料夹内,档名输入为 clipped_ ,然后按下 Save

../../_images/194.png
  1. 您会看到一个新的弹出窗口 Autofill settings 对话框。选择 使用参数值填充 作为 Autofill mode 。选择 输入层 作为 Parameter to use 。此设置会将输入文件名和指定的 clipped_ 文件名一起添加到输出中。确保所有输出文件具有唯一的名称并且它们不会相互覆盖很重要。

../../_images/203.png
  1. 现在,我们准备开始批处理。确保检查完成时 Load layers on completion ,然后单击 Run

../../_images/216.png
  1. 裁剪算法将针对每个输入运行,并创建我们指定的输出文件。批处理过程完成后,请单击 Close 以返回到QGIS。

注解

提示:QGIS现在可以在后台运行处理任务,而不会阻塞用户界面。因此,如果您的批处理过程很耗时,则可以关闭对话框并继续处理QGIS中的其他任务,而该过程仍在后台运行。

../../_images/223.png
  1. 返回 QGIS 主窗口,您将看到添加到 QGIS 画布中的图层。您会注意到,所有全局层都已正确裁剪到我们指定的大陆边界。

../../_images/232.png
  1. 我们已经完成了批量裁剪多个图层的任务。但是QGIS3具有另一个方便的功能,它将帮助您以更有效的方式保存和交付结果。如果要将剪切的图层交付给某人,则可以将单个文件压缩到QGIS之外。将输出图层打包在单个 Geopackage 中的更好选择。在 QGIS Browser 中,找到裁剪后的输出层。您可能必须单击 Refresh 按钮才能看到新添加的文件。

../../_images/242.png
  1. 按住 Ctrl 键并选择图层。将它们拖到画布上以将它们加载到QGIS中。

../../_images/252.png
  1. Processing Toolbox 中,找到 Database ‣ Package layers 工具。

../../_images/262.png
  1. Package layers 对话框中,单击 Input layers 旁边的 按钮。

../../_images/272.png
  1. Multiple selection 对话框中,检查 clipped_ne_10m_portsclipped_ne_10m_railroadsclipped_ne_10m_urban_areas 图层。点击 OK

../../_images/282.png
  1. 选择输入图层后,单击 Destination Geopackage 旁边的 ,然后选择 Save To File

../../_images/291.png
  1. 输入输出文件名为 clipped_layers

../../_images/301.png
  1. 单击 Run 以开始打包过程。

../../_images/314.png
  1. 该过程完成后,您将在 QGIS Browser 中看到一个新的geopackage文件,其中包含所有裁剪的输出层。这是计算机上包含所有输出图层的单个文件。

../../_images/322.png