本系列文章是根据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 = [(0, 0), (0, 2), (1, 1), (2, 2), (2, 0), (1, 1), (0, 0)]
2>>> p = Polygon(coords)
3>>> p
4<POLYGON ((0 0, 0 2, 1 1, 2 2, 2 0, 1 1, 0 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 = [(0, 0), (0, 2), (1, 1), (2, 2), (2, 0), (1, 1), (0, 0)]
4>>> p = Polygon(coords)
5>>> p
6<POLYGON ((0 0, 0 2, 1 1, 2 2, 2 0, 1 1, 0 0))>
7
8>>> make_valid(p)
9<MULTIPOLYGON (((1 1, 0 0, 0 2, 1 1)), ((2 0, 1 1, 2 2, 2 0)))>
10
11>>> list(make_valid(p).geoms)
12[<POLYGON ((1 1, 0 0, 0 2, 1 1))>, <POLYGON ((2 0, 1 1, 2 2, 2 0))>]
“领结”形式的几何对象(灰色)会被分割成两部分(红、绿两部分),如下图所示:
再如,下面的几何对象会被分割成不同类型的两个部分(Polygon
+LineString
):
1>>> coords = [(0, 2), (0, 1), (2, 0), (0, 0), (0, 2)]
2>>> p = Polygon(coords)
3>>> p
4<POLYGON ((0 2, 0 1, 2 0, 0 0, 0 2))>
5
6# 几何对象被分割成不同类型的两个部分
7>>> make_valid(p)
8<GEOMETRYCOLLECTION (POLYGON ((2 0, 0 0, 0 1, 2 0)), LINESTRING (0 2, 0 1))>
9
10>>> list(make_valid(p).geoms)
11[<POLYGON ((2 0, 0 0, 0 1, 2 0))>, <LINESTRING (0 2, 0 1)>]
如下图所示,其中,灰色为原几何对象,红色和绿色为返回的几何对象:
END
本篇文章来源于微信公众号: 码农设计师