首页Python【Shapely矢量数据空...

【Shapely矢量数据空间分析】18.其他操作——诊断对象有效性


本系列文章是根据Shapely官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。

点击“阅读原文”或者直接访问下方链接,查看翻译整理的“Shapely 2.0.0 中文文档”。

https://www.mizhushare.com/docs/shapely-2-0-0-%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3/
本系列文章配套代码获取有以下两种途径:
  • 可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/1iWGGhB4kra9V7bUj-CWR0w?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Shapely



使


  • validation.explain_validity(ob):

返回阐明该对象有效性或无效性的一个字符串。

不过这些信息也可能没有解析出来问题。

例如,对一个经典的 “领结”形式的几何对象执行该操作:

 1>>> coords = [(00), (02), (11), (22), (20), (11), (00)]
2>>> p = Polygon(coords)
3>>> p
4<POLYGON ((0 00 21 12 22 01 10 0))>
5
6>>> from shapely.validation import explain_validity
7
8# 返回阐明该对象有效性或无效性的一个字符串
9>>> explain_validity(p)
10'Ring Self-intersection[1 1]'


  • validation.make_valid(ob):

如果是无效的,返回一个有效的几何对象;如果是有效的,将返回输入的几何对象自身。

在许多情况下,为了创建一个有效的几何对象,输入的几何对象必须被分割成多个部分或多个几何对象。如果几何对象必须被分割成相同的几何对象类型的多个部分,那么将返回一个多部分的几何对象(如MultiPolygon)。如果几何对象必须被分割成不同类型的多个部分,那么将返回一个几何集合。

例如,对一个经典的 “领结”形式的几何对象执行该操作

 1>>> from shapely.validation import make_valid
2
3>>> coords = [(00), (02), (11), (22), (20), (11), (00)]
4>>> p = Polygon(coords)
5>>> p
6<POLYGON ((0 00 21 12 22 01 10 0))>
7
8>>> make_valid(p)
9<MULTIPOLYGON (((1 10 00 21 1)), ((2 01 12 22 0)))>
10
11>>> list(make_valid(p).geoms)
12[<POLYGON ((1 10 00 21 1))>, <POLYGON ((2 01 12 22 0))>]

 “领结”形式的几何对象(灰色)会被分割成两部分(红、绿两部分),如下图所示:

再如,下面的几何对象会被分割成不同类型的两个部分(Polygon+LineString):

 1>>> coords = [(02), (01), (20), (00), (02)]
2>>> p = Polygon(coords)
3>>> p
4<POLYGON ((0 20 12 00 00 2))>
5
6# 几何对象被分割成不同类型的两个部分
7>>> make_valid(p)
8<GEOMETRYCOLLECTION (POLYGON ((2 00 00 12 0)), LINESTRING (0 20 1))>
9
10>>> list(make_valid(p).geoms)
11[<POLYGON ((2 00 00 12 0))>, <LINESTRING (0 20 1)>]

如下图所示,其中,灰色为原几何对象,红色和绿色为返回的几何对象


END


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments