利用处理建模自动执行复杂的工作流程 (QGIS3)

GIS 操作通常包含许多步骤,上一步骤的输出会被拿来当作下一步骤的输入。如果你想改变输入资料或调整操作中的参数,可能就需要手动把整套操作重新跑一遍。幸运的是,QGIS 有内建的图形建模,可以用来定义操作中的各步骤,然后以非常简单的方式执行。你也可以使用它来进行批次处理,把很多的输入档一次完成。

内容说明

我们将对海上海盗事件进行点分析,并创建一个处理模型,通过将其汇总在全球六边形网格上来生成密度图。

你还会学到这些

  • 使用全局等面积投影并设置 Project CRS 。

  • 将渐变符号系统应用于多边形层。

取得资料

National Geospatial-Intelligence Agency’s Maritime Safety Information portal provides a shapefile of all incidencts of maritine piracy in the form on Anti-shipping Activity Messages. Download the Arc Shape file version of the database.

Natural Earth 具有多个全局矢量层。下载包含陆地多边形的 0m Physical Vectors - Land

为了方便起见,你也可以直接用下面的连结下载此图层:

ASAM_shp.zip

ne_10m_land.zip

资料来源 [NGA_MSI] [NATURALEARTH]

操作流程

  1. 在 QGIS 浏览器面板中,找到保存下载数据的目录。展开 ne_10m_land.zip ,然后选择 ne_10m_land.shp 层。将图层拖到画布上。接下来,找到 ASAM_shp.zip 文件。展开并选择 ASAM 11 OCT 18.shp 图层并将其拖到画布上。

../../_images/1106.png
  1. ASAM 11 OCT 18.shp 图层没有与之关联的投影信息,因此将提示您在 Coordinate Reference System Selector 中选择一个CRS 。这里的点在纬度和经度坐标中,因此选择 WGS 84 CRS,然后单击 OK

../../_images/259.png
  1. 加载图层后,您可以看到代表盗版位置事件的各个点。让我们开始构建处理模型来处理这些层。转到 Processing ‣ Graphical Modeler…

../../_images/337.png
  1. Processing Modeler 对话框中,找到 Model Properties 面板。输入 piracy hexbin 作为模型 Name ,并输入 projects 作为组 Groups 。点击 Save 按钮。

../../_images/422.png
  1. 将模型另存为 piracy_hexbin

../../_images/522.png
  1. 现在,我们可以开始构建处理管道的图形模型。 Processing modeler 对话框包含一个左侧面板和一个主画布。在左侧面板上,找到列出各种输入数据类型 Inputs 面板。向下滚动并选择 + Vector Layer 输入。将其拖到画布上。

../../_images/622.png
  1. 输入 Input Points 作为 Parameter name ,并输入 Point 作为 Geometry type 。此输入表示盗版事件点层。

../../_images/721.png
  1. 接下来,将另一个 + Vector Layer 输入拖到画布上。输入 Base Layer 作为 Parameter name ,输入 Polygon 作为 Geometry type 。此输入代表自然地球的全球陆地层。

../../_images/821.png
  1. 在生成全局六边形网格时,我们可以要求用户向我们提供网格大小作为输入,而不是将其硬编码为模型的一部分。这样,用户可以快速试验不同的网格大小,而根本无需更改模型。选择一个 + Number 输入,然后将其拖到画布上。 输入 Grid Size 作为 Parameter name ,然后单击 OK

../../_images/921.png
  1. 现在我们已经定义了用户输入,现在可以添加处理步骤了。所有处理算法都可以在 Algorithms 标签下使用。我们管道中的第一步将是将基础层重新投影到 Project CRS 。 搜索 Reproject layer 算法并将其拖到画布上。

注解

此重新投影步骤的必要性很快将变得清楚。网格生成算法要求我们以 Project CRS 为单位指定网格范围。我们可以提供此重新投影的图层来计算此范围。

../../_images/1021.png
  1. Reproject layer 对话框中,选择 Base Layer 作为 Input layer 。检查将 Use project CRS 用作 Target CRS 。点击 OK

../../_images/1124.png
  1. Processing Modeler 画布中,您会注意到在 + Base Layer 输入和 Reproject layer 算法之间出现了连接。 此连接指示我们的处理管道的流程。下一步是创建一个六边形网格。搜索 Create grid 算法并将其拖到画布上。

../../_images/1221.png
  1. Generate grid 对话框中,选择 Hexagon (polygon) 作为 Grid type 。选择 ``Extent of ‘Reprojected’ `` 作为 Grid extent 。单击 Horizonal spacing 标签下的 123 按钮,然后选择 Model input

../../_images/1320.png
  1. Using model input 选择 Grid Size 输入。对 Vertical Spacing 重复相同的过程。点击 OK

../../_images/1420.png
  1. 至此,我们有了一个整体的六角形网格。网格横跨基础层的整个范围,包括陆地区域和没有点的地方。让我们过滤掉没有输入点的那些网格多边形。搜索 Extract by location 算法并将其拖到画布上。

../../_images/1519.png
  1. 对于从中提取特征,请从算法 Extract features from 中选择 'Grid' from algorithm 'Generate Grid' ,将 Where the features (geometric predicate) 设为 Intersect 并且 By compating to the features from 作为 Input points 。点击 OK

../../_images/1617.png
  1. 现在,只有那些包含一些输入点的网格多边形。为了汇总这些点,我们将使用 Count points in polygon 算法。搜索并将其拖到画布上。

../../_images/1718.png
  1. 从算法 按位置提取'中选择'提取(位置)' `` 作为 ' :guilabel:`Polygons` 的值。:guilabel:`Points` 层将是 ``输入点 。在底部,将 Count 输出层命名为 Aggregated 。点击 OK

../../_images/1817.png
  1. 模型现在完成。点击 Save 按钮。

../../_images/1914.png
  1. 切换到 QGIS 主窗口。您可以在 Models ‣ projects ‣ piracy_hexbin 下的 Processing Toolbox 中找到新创建的模型。现在该运行并测试模型了。由于我们的目标是在六边形网格上聚合输入点,因此使用等面积投影生成网格非常重要。这将确保不管网格的位置如何,它都将覆盖完全相同的区域。我们的模型没有明确要求 CRS ,而是使用设置为 Project CRS 的任何 CRS 。让我们选择一个全局等面积投影作为 Project CRS 。转到 Project-> Properties

../../_images/2011.png
  1. Project Properties 对话框中,切换到 CRS 标签。在此练习中,我们将使用全局 Mollweide 投影,这是一个相等面积的投影。在 Filter 框中搜索 Mollweide 并选择 World_Mollweide EPSG:54009 作为 CRS 。点击 OK

../../_images/2116.png
  1. 您将看到即时将图层重新投影到选定的 CRS 。在 Processing Toolbox 中找到 piracy_hexbin 模型,然后双击它。

../../_images/2214.png
  1. 我们 Base Layer 标签是 ne_10m_land ,输入 Input Points 标签层是 ASAM 11 OCT 18 。需要以所选 CRS 的单位指定 Grid Size 。World_Mollweide CRS 单位是米,因此我们将 Grid Size 指定为 100000 m 。单击 Run 以启动处理管道。该过程完成后,单击 Close

../../_images/2312.png
  1. 您将看到作为模型结果加载的新层 Aggregated 。在探索时,您会注意到该图层包含一个名为 NUMPOINTS 的属性,该属性包含该网格要素中包含的盗版事件点的数量。让我们设置此图层的样式以更好地显示此信息。右键单击 Aggregated 层,然后选择属性。

../../_images/2410.png
  1. 切换到 Symbology 标签。选择 Gradeated 符号体系和 NUMPOINTS 作为 Column 列。点击 Symbol 标签旁边的 Change ..

../../_images/2510.png
  1. 选择 Simple fill 符号,然后在 Stroke color 下选中 Transparent Stroke 按钮。这是为了使六边形边缘透明。

../../_images/267.png
  1. 单击颜色渐变旁边的下拉菜单,然后选择 Viridis 渐变。再次单击下拉列表,然后选择 Invert Color Ramp 以反转颜色顺序。

../../_images/277.png
  1. 分级符号系统会将所选列中的值划分为不同的类别,并为每个类别分配不同的颜色。选择 Natural Breaks(Jenks) 作为 Mode ,然后单击 Classify ,然后单击 OK

注解

有关不同模式的详细说明,请参见 ../ basic_vector_styling

../../_images/287.png
  1. 返回 QGIS 主窗口,关闭 ASAM 11 OCT 18 层。您将看到全球盗版热点的漂亮可视化。

../../_images/296.png

现在,您已经在模型中编码了完整的数据管道,现在可以轻松重现结果。模型还可以让您快速进行实验,而无需每次手动重复每个中间步骤。如果您的输入随时间变化,比如说几个月后发布了更新的盗版数据库,则可以在该输入上运行模型以生成类似的可视化效果,而不必记住每个步骤。