Python 如何在Shapely中找到每对线串之间的交点?
我有一个子列表,其中包含Shapely中的LineString,如下所示:Python 如何在Shapely中找到每对线串之间的交点?,python,intersection,shapely,Python,Intersection,Shapely,我有一个子列表,其中包含Shapely中的LineString,如下所示: My_list = [ [(0, 0), (1, 1), (1,2), (2,2)], [(0, 0), (1, 1), (2,1), (2,2)], [(-1, 0), (1, -1), (-2,1), (2,0)] ] 在我的列表中,我有三个(在本例中是三个,在我的例子中是数千个)集合,它们在Shapely中定义为LineSt
My_list = [
[(0, 0), (1, 1), (1,2), (2,2)],
[(0, 0), (1, 1), (2,1), (2,2)],
[(-1, 0), (1, -1), (-2,1), (2,0)]
]
在我的列表中,我有三个(在本例中是三个,在我的例子中是数千个)集合,它们在Shapely中定义为LineString
现在我喜欢迭代地查找每个子列表之间的交集,例如,正如我所说的,这里有三个字符串。让我们把它们叫做a1
,a2
,a3
a1 = [(0, 0), (1, 1), (1,2), (2,2)]
a2 = [(0, 0), (1, 1), (2,1), (2,2)]
a3 = [(-1, 0), (1, -1), (-2,1), (2,0)]
我想找到每一对之间的交叉点检查(也要找到交叉点):(a1,a2),(a1,a3),(a2,a1),(a2,a3),(a3,a1),(a3,a2)。下面是一个函数,该函数用于查找两个iterables列表之间的交叉点:
def find_intersection(list1,list2):
lst =[]
for el1 in list1 :
if any(el1 is el2 for el2 in list2):
lst.append(el1)
return lst
您可以像我一样在循环中使用它来返回所有子列表之间的所有可能交点:
result = []
for index1 in range(0,len(My_list)):
for index2 in range(0,len(My_list)) :
if index1 is not index2 :
inter = find_intersection(My_list[index1],My_list[index2])
if inter :
result.append({('a'+str(index1 +1 ),'a'+str(index2 + 1 )): inter})
为了使结果可读,我让它返回一个字典列表,如:
[{(a1,a2):inter1}
(a1,a3):inter2}
发射型计算机断层扫描仪。。
]
请注意,我忽略了结果列表中没有交叉点的夫妇。您尝试过任何代码吗?有什么问题吗?据我所见,有两个问题需要解决:1)获取和2)在LineString之间获取。第一部分及其变体在这里已经被多次询问和回答。第二个很简单,很容易在Google中找到,并且存在于Shapely文档中。就目前而言,我认为这个问题对社区没有任何价值。我投票关闭它,因为它太宽了。我看不到您使用shapely的任何交叉点命令来查找交叉点,对吗?