我有一个包含GPS坐标排列的列表(一次最多获取3个) 我想要这些排列之间的距离。 一个例子是 [pt1,pt2,pt3,p4,p5] 所以我有上述列表的可能排列,例如[[pt1,pt3),(pt2,pt4)]等,我想要这些点之间的距离。
我使用的是mpu pkg,我可以获取两点之间的距离,但是我想将列表传递到函数中并获取所有距离
def distcalc(a,b):
return m.haversine_distance(a,b)
distcalc((50.3433918,3.1150847), (50.2657168,2.7968176))
output : 24.19755642690434
答案 0 :(得分:1)
为什么不使用列表推导?
假设您的排列列表称为permutations
,则代码如下所示:
def distcalc(a,b):
return m.haversine_distance(a,b)
permuations = [ ((50.3433918,3.1150847), (50.2657168,2.7968176)), ((49.12328,3.5342847), (51.43267168,2.4623513)) ]
distances = [distcalc(p[0], p[1]) for p in permumations]
答案 1 :(得分:1)
这里是如何列出任意2个点之间的距离的示例。我假设您不想重复计算点数(例如(pt1, pt2)
与(pt2, pt1)
相同)。如果我做这个假设不对,则可以使用itertools.permutations
代替itertools.combinations
。您也可以对3点应用相同的方法,并根据需要对distcalc()
函数进行一些修改。
import mpu as m
from itertools import combinations
import random
random.seed(0)
pts = [(random.uniform(50,51),random.uniform(2,4)) for _ in range(5)]
def distcalc(pts):
return m.haversine_distance(pts[0], pts[1])
pts_combos = list(combinations(pts, 2))
pts_distances = [distcalc(combo) for combo in pts_combos]
print(pts_distances)
输出:
[84.71362807087625, 62.02569640399133, 64.23798168475103, 47.73360319424448, 22.999460663434967, 40.87224193873041, 46.36818755317338, 33.52072531697023, 25.538758765945207, 52.227892324230865]