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中常见的各种拓扑非法问题的解决之道~

相关文章
|
关系型数据库 MySQL 数据库
tushare宏观数据使用pandas入库,增加唯一索引
1,对pandas入数据库 pandas代码中自带了to_sql的方法可以直接使用。 但是数据字段是text的,需要修改成 varchar的,否则不能增加索引。 在增加了主键之后可以控制数据不能再增量修改了。 增加:dtype类型可以解决 dtype={col_name: NVARCHAR(length=255) for col_name in dat
3548 0
|
2月前
|
存储 数据可视化 数据处理
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
|
4月前
|
数据处理 索引 Python
Pandas常见问题与解决方案:避开数据处理中的坑
【4月更文挑战第16天】本文总结了Pandas数据处理中的常见问题及解决方案:1) 数据类型不匹配,使用`astype`转换;2) 缺失值处理,用`dropna`删除或`fillna`填充;3) 内存占用过大,通过选择性加载列、指定`dtype`和使用`chunksize`分块处理;4) 合并数据问题,确保键匹配和正确合并方式;5) 排序和分组聚合错误,使用`sort_values`/`sort_index`和`groupby`配合聚合函数。掌握这些技巧可提高数据处理效率。
|
4月前
|
数据采集 人工智能 数据挖掘
Python数据分析:利用Pandas库处理缺失数据的技巧
在数据分析中,数据的完整性对结果的准确性至关重要。本文将介绍如何利用Python中强大的Pandas库来处理数据中的缺失值,帮助您更好地进行数据清洗和分析。
|
数据采集 数据挖掘 数据处理
pandas数据清洗之处理缺失、重复、异常数据
在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。 本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。
327 0
|
数据挖掘 数据处理 Python
Pandas进阶:处理缺失数据和数据聚合
在本篇文章中,我们将深入探讨Pandas库中两个重要的数据处理功能:处理缺失数据和数据聚合。
|
数据格式 Python
pandas实现筛选功能方式【探索AnnData数据格式】
pandas实现筛选功能方式【探索AnnData数据格式】
|
机器学习/深度学习 存储 JSON
从Pandas快速切换到Polars :数据的ETL和查询
对于我们日常的数据清理、预处理和分析方面的大多数任务,Pandas已经绰绰有余。但是当数据量变得非常大时,它的性能开始下降。
312 0
|
数据挖掘 索引 Python
Pandas 缺失数据
Pandas 缺失数据
Pandas 缺失数据
|
数据可视化 数据挖掘 索引
数据导入与预处理-拓展-pandas筛选与修改(上)
数据导入与预处理-拓展-pandas筛选与修改 1. 数据筛选与修改 1.1 加载数据 1.2 数据修改 1. 数据修改--修改列名 2. 数据修改--修改行索引
数据导入与预处理-拓展-pandas筛选与修改(上)