我有一个坐标列表:
[(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),..]
我正在尝试编写代码,允许我使用Haversine模块计算每个代码之间的距离:
(伪代码)
for points in daycoords1:
p1 = day1coords[0]
p2 = day1coords[1]
dist_miles = haversine(p1, p2, miles=True)
distday1.append(dist_miles)
有没有办法拉入坐标一和二,测量距离,两个和三个,并测量距离等。
我一直在尝试使用itertools和zip(),但我还没有运气。
答案 0 :(得分:2)
我确切确定要使用haversine
模块中的哪个功能,但为了比较坐标列表中的两个连续项,您可以使用列表理解使用坐标的zip
个切片:
coords = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766)]
distances = [haversine(p1, p2, miles=True) for p1, p2 in zip(coords[:-1], coords[1:])]
这会将p1
与p2
,p2
与p3
,p3
与p4
进行比较等等......
答案 1 :(得分:1)
如果我理解正确,您需要做的就是迭代执行zip(daycoords1, daycoords1[1:])
并进行计算。演示:
>>> daycoords1 = [(1,2), (3,4), (5,6)]
>>> for x in zip(daycoords1, daycoords1[1:]):
... print(x)
...
((1, 2), (3, 4))
((3, 4), (5, 6))
如果您有很多坐标,请考虑itertools.izip
的内存效率。
答案 2 :(得分:1)
如果您想计算两个位置之间的距离(range
中显示并且向前看),您可以尝试d
,如下所示。
from haversine import haversine
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(53.45028622, -1.93212766)]
data = []
for i in range(len(d)-1):
data.append(haversine(d[i], d[i+1], miles=True))
print data
输出 -
[0.18255943050822185, 2.0818287457607068, 0.09290096620460978, 69.0933027640562]
修改强> -
如果您想在d
中找到所有组合(所有可能的非重复位置对)之间的距离,那么 -
from haversine import haversine
from itertools import combinations
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(52.45028622, -1.93212766)]
data = []
for pair in combinations(d,2):
data.append(haversine(pair[0], pair[1], miles=True))
print data
输出 -
[0.18255943050822185, 2.072320708393457, 2.1169388238266245, 2.1169388238266245, 2.0818287457607068, 2.1333352954019116, 2.1333352954019116, 0.09290096620460978, 0.09290096620460978, 0.0]