geopandas中拓扑错误的发现诊断与修复

简介: geopandas中拓扑错误的发现诊断与修复

1 简介

大家好我是费老师,geopandas作为在Python中开展GIS分析的利器,可以帮助我们快捷地解决很多日常GIS操作需求。而我们平时工作研究中使用到的各种矢量数据,由于原始数据加工过程的不规范等问题,偶尔会导致某些要素自身的矢量数据信息「非法」

这样的「非法」要素读到geopandas或是PostGIS等常用GIS工具中,在进行一些矢量计算操作时会触发拓扑错误问题,而今天的文章中,我们就来学习一下在geopandas中如何有效地解决此类的要素拓扑非法问题。

2 在geopandas解决拓扑错误问题

2.1 geopandas中常见的要素拓扑错误情况

geopandas中,要素的合法性(validity)是针对「面要素」「多部件面要素」而言的,同其底层依赖的shapely库一样,遵守着OGC(开放地理空间联盟)标准,在shapely高度完备的功能封装下,我们在日常创建面要素矢量时只需要注意别出现下面几种常见的情况就行:

  • 错误情况1:「坐标串自交叉」

  • 错误情况2:「边界线存在重叠」

  • 错误情况3:「内部孔洞之间存在共边」

  • 错误情况4:「内部孔洞与外边界共边」

  • 错误情况5:「多部件面要素之间存在重叠」

值得一提的是,除了查看要素的is_valid属性是否为True外,在jupyter中非法的shapely要素还会像上面各图那样以红色显示(合法是绿色)。

2.2 对拓扑错误要素进行诊断

上面列举的是我们自行构建面要素、多部件面要素时常见的拓扑错误,但若我们的数据来自从外部读取的矢量文件:

查看is_valid属性仅能知晓各个矢量是否合法:

而配合shapely中的explain_validity()则可以具体诊断出各自具体的拓扑非法原因:


通过这些信息,我们就可以更有的放矢地决定对各个要素进行删除还是修复操作。

2.3 对拓扑问题进行修复

既然发现了拓扑非法问题,通常情况下我们肯定是希望可以尽可能地修复数据,而不是粗暴地予以删除,geopandas0.12.0版本开始提供了基于shapely.validation.make_valid()的快捷拓扑修复方法make_valid(),对于小于0.12.0版本的geopandas,我们则可以配合map()快捷实现同样的效果:

下面我们来瞅瞅针对每种情况具体是如何进行「修复」的:

  • 修复错误情况1:「坐标串自交叉」

可以看到,通过make_valid()针对「坐标串自交叉」进行修复的方式是将其拆分为多个合法多边形构成的多部件要素:

如果你希望最后的结果为一个完整的多边形,这里给大家推荐一种奇淫巧技,在不影响原始数据精度的情况下,对结果做一个非常小的缓冲区即可:


  • 修复错误情况2:「边界线存在重叠」

类似的,对于「边界线存在重叠」的情况,修复后的结果是将重叠部分作为线要素,剩余部分保留面要素:

这时配合shapely.ops.unary_union()过滤掉非面要素的要素构件即可:

  • 修复错误情况3:「内部孔洞之间存在共边」

针对「内部孔洞之间存在共边」的情况,修复的结果中包含了被剔除的孔洞公共边及剩余的合法面要素,非常舒服:

  • 修复错误情况4:「内部孔洞与外边界共边」

针对「内部孔洞与外边界共边」情况下的修复结果,毕竟这种情况下涉及到的孔洞是不可能被保留的:

  • 修复错误情况5:「多部件面要素之间存在重叠」

这种情况下的修复策略显而易见,如果你希望修复后的结果「仍然是多部件要素」,那么将公共部分移除是唯一的方案:

至此我们就掌握了geopandas中常见的各种拓扑非法问题的解决之道~

相关文章
|
18天前
|
Python
通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法
在金融分析领域,"死叉"指的是短期移动平均线(如MA5)下穿长期移动平均线(如MA10),而"金叉"则相反。本文介绍了一种利用Python编程语言,通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法。该方法首先计算两种移动平均线,接着确定它们的交叉点,最后检查并输出最近一次死叉及其后是否形成了金叉。此技术广泛应用于股市趋势分析。
34 2
|
19天前
|
Python
如何利用Pandas库找到最近一次死叉后未出现金叉的具体位置
在金融分析领域,"死叉"指短期移动平均线跌破长期移动平均线,而"金叉"则相反。本文介绍了一个Python示例,演示如何利用Pandas库找到最近一次死叉后未出现金叉的具体位置,包括计算移动平均线、确定交叉点、识别死叉和金叉,以及输出相关分析结果。此方法适用于各类包含收盘价数据的金融分析场景。
26 1
|
1月前
|
数据可视化 数据挖掘 数据处理
模型预测笔记(四):pandas_profiling生成数据报告
本文介绍了pandas_profiling库,它是一个Python工具,用于自动生成包含多种统计指标和可视化的详细HTML数据报告,支持大型数据集并允许自定义配置。安装命令为`pip install pandas_profiling`,使用示例代码`pfr = pandas_profiling.ProfileReport(data_train); pfr.to_file("./example.html")`。
47 1
|
5月前
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
634 3
|
6月前
|
数据采集 数据挖掘 数据格式
探讨 DataFrame 的高级功能,如数据清洗、转换和分组操作
【5月更文挑战第19天】本文探讨了DataFrame的高级功能,包括数据清洗、转换和分组操作。在数据清洗时,使用fillna处理缺失值,设定阈值或统计方法处理异常值。数据转换涉及标准化和编码,如将分类数据转为数值。分组操作用于按特定列聚合计算,支持多级分组和自定义聚合函数。掌握这些技能能有效处理和分析数据,为决策提供支持。
88 2
|
6月前
|
数据处理 索引 Python
Pandas常见问题与解决方案:避开数据处理中的坑
【4月更文挑战第16天】本文总结了Pandas数据处理中的常见问题及解决方案:1) 数据类型不匹配,使用`astype`转换;2) 缺失值处理,用`dropna`删除或`fillna`填充;3) 内存占用过大,通过选择性加载列、指定`dtype`和使用`chunksize`分块处理;4) 合并数据问题,确保键匹配和正确合并方式;5) 排序和分组聚合错误,使用`sort_values`/`sort_index`和`groupby`配合聚合函数。掌握这些技巧可提高数据处理效率。
|
6月前
|
数据采集 人工智能 数据挖掘
Python数据分析:利用Pandas库处理缺失数据的技巧
在数据分析中,数据的完整性对结果的准确性至关重要。本文将介绍如何利用Python中强大的Pandas库来处理数据中的缺失值,帮助您更好地进行数据清洗和分析。
|
数据采集 数据挖掘 数据处理
pandas数据清洗之处理缺失、重复、异常数据
在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。 本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。
425 0
|
数据挖掘 数据处理 Python
Pandas进阶:处理缺失数据和数据聚合
在本篇文章中,我们将深入探讨Pandas库中两个重要的数据处理功能:处理缺失数据和数据聚合。
|
数据格式 Python
pandas实现筛选功能方式【探索AnnData数据格式】
pandas实现筛选功能方式【探索AnnData数据格式】