如何在 Shapely 中找到每对 LineString 之间的交集?
How to find the intersection between each pair of LineString in 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 中定义为 LineString。
现在我喜欢迭代地找到每个子列表之间的交集,例如我说的,这里我有三个 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).
在找到 2 个可迭代列表之间的交集的函数下方:
def find_intersection(list1,list2):
lst =[]
for el1 in list1 :
if any(el1 is el2 for el2 in list2):
lst.append(el1)
return lst
你可以在循环中使用它,就像我对 return 所有子列表之间所有可能的交叉点所做的那样:
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})
为了使结果可读,我将其设为 return 字典列表,例如:
[ { (a1,a2) :inter1 }
(a1,a3) :inter2 }
等..
]
请注意,我忽略了结果列表中没有交集的夫妇。
我有一个子列表列表,其中包含来自 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 中定义为 LineString。
现在我喜欢迭代地找到每个子列表之间的交集,例如我说的,这里我有三个 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).
在找到 2 个可迭代列表之间的交集的函数下方:
def find_intersection(list1,list2):
lst =[]
for el1 in list1 :
if any(el1 is el2 for el2 in list2):
lst.append(el1)
return lst
你可以在循环中使用它,就像我对 return 所有子列表之间所有可能的交叉点所做的那样:
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})
为了使结果可读,我将其设为 return 字典列表,例如: [ { (a1,a2) :inter1 } (a1,a3) :inter2 } 等.. ]
请注意,我忽略了结果列表中没有交集的夫妇。