获取两个多边形交集区域的坐标(Python实现)

8
假设我有两个多边形,它们的名称和坐标(用Python表示)如下所示:

p:[(1,1),(2,2),(4,2),(3,1)]
q:[(1.5,2),(3,5),(5,4),(3.5,1)]

在我们的大脑中,很容易知道这两个多边形相交并计算出相交区域的坐标,但我想让我们的机器知道如何计算相交区域的坐标。基本上,我想知道是否有一个简单明了的算法能够完成这个任务,如果已经有一个Python库可以做到这一点,那就太完美了。

1
请点击此处查看:https://gis.stackexchange.com/a/90063 - Grzegorz Skibinski
2个回答

23
from shapely.geometry import Polygon

p = Polygon([(1,1),(2,2),(4,2),(3,1)])
q = Polygon([(1.5,2),(3,5),(5,4),(3.5,1)])
print(p.intersects(q))  # True
print(p.intersection(q).area)  # 1.0
x = p.intersection(q)
print(x) #POLYGON ((1.833333333333333 1.833333333333333, 2 2, 4 2, 3.166666666666667 1.166666666666667, 1.833333333333333 1.833333333333333))

Shapely用户手册:https://shapely.readthedocs.io/en/stable/manual.html


感谢您的回答,您的方法实现了我提出的第一个目标,但我想要的是交集区域的坐标,而不是面积,使用shapely可以实现吗? - Zhou XF
1
你不能从交集结果中创建一个新的多边形并计算其面积吗? - ZWang
对于未来的读者,请参阅 此答案 以了解如何与 GEOS 一起安装 shapely。请注意,通过 pip 安装 shapely 不会自动安装 GEOS。 - mhdadk

1
from turfpy.transformation import intersect
from turfpy.measurement import area
from geojson import Feature
f = Feature(geometry={"coordinates": [
[[-122.801742, 45.48565], [-122.801742, 45.60491],
[-122.584762, 45.60491], [-122.584762, 45.48565],
[-122.801742, 45.48565]]], "type": "Polygon"})
b = Feature(geometry={"coordinates": [
[[-122.520217, 45.535693], [-122.64038, 45.553967],
[-122.720031, 45.526554], [-122.669906, 45.507309],
[-122.723464, 45.446643], [-122.532577, 45.408574],
[-122.487258, 45.477466], [-122.520217, 45.535693]
]], "type": "Polygon"})
inter = intersect([f, b])
area(inter)

您可以使用Turfpy,这是一个包含各种功能的库 Turfpy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接