23_处理无效几何体 QGIS3
原文链接: https://www.qgistutorials.com/en/docs/3/handling_invalid_geometries.html
处理无效几何体 (QGIS3)¶
在处理矢量数据图层时,您可能会遇到几何错误。这些错误通常在运行地理处理、数字化、编辑或数据转换后成为您数据的一部分。QGIS3 内置了检测和修复无效几何体的工具和算法。本教程将向您展示处理数据中无效几何体的典型工作流程。
注意
不同的软件系统实现了不同的几何有效性概念。但 GIS 中使用的几何模型的主要标准是 OGC 简单要素规范 (SFS)。在本教程中,我们将使用遵循此标准的 GEOS 库来检查几何有效性。这篇文章很好地概述了 OGC 标准定义的常见几何错误。
任务概述¶
我们将处理印度的行政区划图层,并修复一个州的多边形几何错误。
您将学到的其他技能¶
- 使用 拓扑着色 算法为多边形图层应用着色方案。
获取数据¶
Datameet 提供社区创建的印度行政区划 shapefile 文件。
下载 Datameet 空间数据仓库 [约150 MB] 压缩文件。下载的归档文件包含多个文件夹。解压归档文件并使用 States/ 文件夹中的文件。
数据来源:[DATAMEET]
操作步骤¶
- 在 QGIS 浏览器中浏览至下载的
India-States.zip文件。展开它并将India-States.shp文件拖到地图画布上。
- 您将看到一个新的
India-States图层加载到图层面板中。转到处理 ‣ 工具箱。
- 我们将尝试在输入图层上运行一个处理算法,以演示无效几何体如何在地理处理操作中引发问题。搜索并找到制图 ‣ 拓扑着色算法。双击以启动它。
- 在拓扑着色对话框中,选择
India-States作为输入图层。将所有其他参数保持为默认值,然后单击运行。
注意
拓扑着色 算法实现了一种为地图着色的算法,使得相邻的多边形不具有相同的颜色。这是一种有用的制图技术,四色定理 指出,只需要 4 种颜色就能达到这个结果。该定理还有另一个版本称为 五色定理。QGIS 在此算法中实现了五色定理。
- 算法运行时,您将在日志选项卡中看到一条警告信息。输入图层中有 1 个要素存在无效几何体,在处理过程中被跳过。处理工具箱中处理无效几何体的默认设置位于设置 ‣ 选项 ‣ 处理 ‣ 常规 ‣ 无效要素过滤,设置为
跳过(忽略)具有无效几何体的要素。这是一个很好的默认设置,但如果您的输入数据量很大,您可能会错过此警告,并且可能不知道有输入要素被跳过。您可能希望将值更改为当几何体无效时停止算法执行。
- 返回到主 QGIS 窗口,您将看到一个新的
Colored图层添加到图层面板中。请注意,新图层缺少一个存在无效几何体的州。我们现在知道这个特定的州多边形具有无效几何体,但我们不知道原因。我们可以很容易地找出来。搜索并找到矢量几何 ‣ 检查有效性算法。
- 在检查有效性对话框中,选择
India-States作为输入图层。选择GEOS作为方法。点击运行。
- 算法处理完成后,您将在图层面板中看到 3 个新图层 -
Valid output、Invalid output和Error output。Error output图层包含几何错误的位置和描述。右键单击它并选择打开属性表。
注意
QGIS 文档中有一篇详细文章 错误消息类型及其含义,解释了所有错误的原因。
- 您将看到错误信息是 环自相交。选择该行并单击缩放地图到所选要素按钮。放大后,您将看到几何错误的根本原因。
- QGIS 内置了一个自动修复几何错误的算法。搜索并找到矢量几何 ‣ 修复几何算法。双击运行它。
- 在修复几何对话框中,选择
India-States作为输入图层,然后单击运行。
- 一个新的
Fixed Geometries图层将被添加到图层面板。此时,几何错误已修复,您可以在该图层上运行任何处理算法而不会出现问题。但是我们可以看到相邻多边形之间仍然存在一个意外的间隙,这可能会在后续处理中导致拓扑错误。我们也可以通过编辑多边形来修复这个问题。单击数字化工具栏中的切换编辑按钮。选择顶点工具,并从下拉列表中选择顶点工具(当前图层)。
- 当顶点工具激活时,单击一个顶点以选中它。您可以按
Delete键删除顶点,或拖动它以移动它。您可以移动顶点,使多边形的边现在接触到相邻的多边形。
- 完成后,再次单击切换编辑按钮,然后单击保存。
- 让我们再次运行制图 ‣ 拓扑着色算法。
- 在拓扑着色对话框中,确保选择
Fixed Geometries作为输入图层。点击运行。
- 您将看到算法运行没有任何错误,一个新的
Colored图层将被添加到图层面板。请注意,该算法本身不会为图层着色,而是通过向每个多边形添加一个名为color_id的新列来工作,该列可用于分配一个与相邻多边形不同的唯一颜色。选择Colored图层并单击打开图层样式面板按钮。
- 选择
分类渲染器,并将列color_id作为值。单击分类。现在您将看到地图被着色,使得相邻的多边形具有不同的颜色。
如果您想提供反馈或分享您对本教程的体验,请在下方留言。(需要 GitHub 账户)

















