处理无效的几何(QGIS3)

使用矢量数据层时,可能会遇到几何错误。在运行地理处理,数字化,编辑或数据转换后,这些错误通常会成为数据的一部分。QGIS3带有内置工具和算法,可以检测和修复无效的几何形状。本教程将向您展示处理数据中无效几何图形的典型工作流程。

注解

不同的软件系统实现不同的几何有效性概念。但是,用于GIS的几何模型的主要标准是OGC Simple Features Specifications (SFS)。在本教程中,我们将使用GEOS库检查使用此标准的几何有效性。This post 很好地概述了OGC标准定义的常见几何错误。

任务概述

我们将使用印度的管理边界图层,并修复状态面的几何错误。

您将会学习的其他技能

  • 使用 拓扑着色 算法将着色方案应用于多边形图层。

获取数据

Datameet 为印度提供了社区创建的行政边界shapefile。

下载 India - State Boundaries shapefile。下载的档案包含多个文件夹。提取档案并使用 States/ 文件夹中的文件。

资料来源:[DATAMEET] _

程序

  1. 在QGIS浏览器中浏览到下载的 India-States.zip 文件。将其展开并将 India-States.shp 文件拖到地图画布上。

../../_images/160.png
  1. 您将在 Layers 面板中看到一个新的 India-States 层。进入 Processing ‣ Toolbox

../../_images/235.png
  1. 我们将尝试在输入层上运行处理算法,以演示无效的几何形状如何在地理处理操作期间引起问题。搜索并找到 Cartography ‣ Topological coloring 算法。双击以启动它。

../../_images/325.png
  1. Topological coloring 对话框中,选择 India-States 作为 Input layer。将所有其他参数保留为默认值,然后单击 Run

../../_images/412.png

注解

拓扑着色 算法实现了对地图进行着色的算法,以使相邻的多边形都不具有相同的颜色。这是一种有用的制图技术,Four Color Theorem 指出4种颜色足以实现此结果。该定理有一个图论版本,称为 Five color theorem。QGIS算法的实现基于图形,因此在实践中您将看到诸如此类的复杂多边形层最多需要5种颜色。

  1. 随着算法的运行,您会在 Log 标签中看到警告。输入图层中的1个要素的几何无效,并且在处理过程中被跳过。处理工具箱中用于处理无效几何的默认设置位于 Settings ‣ Options ‣ Processing ‣ General ‣ Invalid features filtering,并设置为 Skip (ignore) features with invalid geometries。这是一个很好的默认设置,但是如果输入很大,您可能会错过此警告,并且可能不知道已跳过输入功能。您可能需要将值更改为 Stop algorithm execution when a geometry is invalid

../../_images/513.png
  1. 回到QGIS主窗口中,您将看到一个新的 Colored 层添加到 Layers 面板中。请注意,新图层缺少几何无效的状态。现在我们知道这个特定的状态多边形具有无效的几何形状,但是我们不知道是什么原因。我们可以很容易地发现这一点。搜索并找到 Vector geometry ‣ Check validity 算法。

../../_images/613.png
  1. Check Validity 对话框中,选择 India-States 作为 Input layer。选择 GEOS 作为 Method。点击 Run

../../_images/712.png
  1. 当算法完成处理后,您将在 Layers 面板中看到3个新层- Valid outputInvalid outputError outputError output 层包含几何错误的位置和描述。右键单击它,然后选择 Open Attribute Table

../../_images/812.png
  1. 您会看到错误消息是 Ring self-intersection。选择该行,然后单击 Zoom map to selected features 按钮。放大时,您将看到几何错误的根本原因。

../../_images/912.png
  1. QGIS带有内置算法,可自动修复几何错误。搜索并找到 Vector geometry ‣ Fix geometries 算法。双击运行它。

../../_images/1012.png
  1. Fix Geometries 对话框中,选择 India-States 作为 Input layer ,然后单击 Run

../../_images/1115.png
  1. 一个新的图层 Fixed Geometries 将被添加到 Layers 面板中。至此,几何错误已修复,您可以在此层上运行任何处理算法而不会出现问题。但是我们可以看到,相邻多边形之间仍然存在间隙,这是无法预料的,并且可能导致线下的拓扑错误。我们也可以通过编辑多边形来解决此问题。在 Digitizing Toolbar 中单击 Toggle Editing 按钮。选择 Vertex Tool,然后从下拉列表中选择 Vertex Tool (Current Layer)

../../_images/1213.png
  1. 激活顶点工具后,单击一个顶点将其选中。您可以按 Delete 键删除一个顶点或拖动它以移动它。您可以移动顶点,以使多边形边缘现在接触相邻的多边形。

../../_images/13.gif
  1. 完成后,再次单击 Toggle Editing 按钮,然后单击 Save

../../_images/1411.png
  1. 让我们再次运行 Cartography ‣ Topological coloring 算法。

../../_images/1510.png
  1. Topological Coloring 对话框中,确保选择 Fixed Geometries 作为 Input layer。点击 Run

../../_images/169.png
  1. 您将看到算法运行无误,并且将新图层 Colored 添加到 Layers 面板中。请注意,该算法不会单独为图层着色,而是通过向每个多边形添加一个称为 color_id 的新列来工作,该列可用于分配与相邻多边形不同的唯一颜色。选择 Colored 图层,然后单击 Open the Layer Styling Panel 按钮。

../../_images/1710.png
  1. 选择 Categorized 渲染器并选择 color_id 列作为 Value 的值。单击 Classify。现在,您将看到彩色地图,以便相邻的多边形具有不同的颜色。

../../_images/189.png