跳转至

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]

操作步骤

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

../../_images/1102.png

  1. 您将看到一个新的 India-States 图层加载到图层面板中。转到处理 ‣ 工具箱。

../../_images/280.png

  1. 我们将尝试在输入图层上运行一个处理算法,以演示无效几何体如何在地理处理操作中引发问题。搜索并找到制图 ‣ 拓扑着色算法。双击以启动它。

../../_images/336.png

  1. 在拓扑着色对话框中,选择 India-States 作为输入图层。将所有其他参数保持为默认值,然后单击运行。

../../_images/417.png

注意

拓扑着色 算法实现了一种为地图着色的算法,使得相邻的多边形不具有相同的颜色。这是一种有用的制图技术,四色定理 指出,只需要 4 种颜色就能达到这个结果。该定理还有另一个版本称为 五色定理。QGIS 在此算法中实现了五色定理。

  1. 算法运行时,您将在日志选项卡中看到一条警告信息。输入图层中有 1 个要素存在无效几何体,在处理过程中被跳过。处理工具箱中处理无效几何体的默认设置位于设置 ‣ 选项 ‣ 处理 ‣ 常规 ‣ 无效要素过滤,设置为 跳过(忽略)具有无效几何体的要素。这是一个很好的默认设置,但如果您的输入数据量很大,您可能会错过此警告,并且可能不知道有输入要素被跳过。您可能希望将值更改为 当几何体无效时停止算法执行

../../_images/516.png

  1. 返回到主 QGIS 窗口,您将看到一个新的 Colored 图层添加到图层面板中。请注意,新图层缺少一个存在无效几何体的州。我们现在知道这个特定的州多边形具有无效几何体,但我们不知道原因。我们可以很容易地找出来。搜索并找到矢量几何 ‣ 检查有效性算法。

../../_images/616.png

  1. 在检查有效性对话框中,选择 India-States 作为输入图层。选择 GEOS 作为方法。点击运行。

../../_images/715.png

  1. 算法处理完成后,您将在图层面板中看到 3 个新图层 - Valid outputInvalid outputError outputError output 图层包含几何错误的位置和描述。右键单击它并选择打开属性表。

../../_images/815.png

注意

QGIS 文档中有一篇详细文章 错误消息类型及其含义,解释了所有错误的原因。

  1. 您将看到错误信息是 环自相交。选择该行并单击缩放地图到所选要素按钮。放大后,您将看到几何错误的根本原因。

../../_images/915.png

  1. QGIS 内置了一个自动修复几何错误的算法。搜索并找到矢量几何 ‣ 修复几何算法。双击运行它。

../../_images/1021.png

  1. 在修复几何对话框中,选择 India-States 作为输入图层,然后单击运行。

../../_images/1124.png

  1. 一个新的 Fixed Geometries 图层将被添加到图层面板。此时,几何错误已修复,您可以在该图层上运行任何处理算法而不会出现问题。但是我们可以看到相邻多边形之间仍然存在一个意外的间隙,这可能会在后续处理中导致拓扑错误。我们也可以通过编辑多边形来修复这个问题。单击数字化工具栏中的切换编辑按钮。选择顶点工具,并从下拉列表中选择 顶点工具(当前图层)

../../_images/1222.png

  1. 当顶点工具激活时,单击一个顶点以选中它。您可以按 Delete 键删除顶点,或拖动它以移动它。您可以移动顶点,使多边形的边现在接触到相邻的多边形。

../../_images/13.gif

  1. 完成后,再次单击切换编辑按钮,然后单击保存。

../../_images/1418.png

  1. 让我们再次运行制图 ‣ 拓扑着色算法。

../../_images/1516.png

  1. 在拓扑着色对话框中,确保选择 Fixed Geometries 作为输入图层。点击运行。

../../_images/1615.png

  1. 您将看到算法运行没有任何错误,一个新的 Colored 图层将被添加到图层面板。请注意,该算法本身不会为图层着色,而是通过向每个多边形添加一个名为 color_id 的新列来工作,该列可用于分配一个与相邻多边形不同的唯一颜色。选择 Colored 图层并单击打开图层样式面板按钮。

../../_images/1716.png

  1. 选择 分类 渲染器,并将列 color_id 作为值。单击分类。现在您将看到地图被着色,使得相邻的多边形具有不同的颜色。

../../_images/1814.png


如果您想提供反馈或分享您对本教程的体验,请在下方留言。(需要 GitHub 账户)