迭代Python中的坐标对

时间:2016-02-02 10:12:04

标签: python loops coordinates itertools haversine

我有一个坐标列表:

[(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(),但我还没有运气。

3 个答案:

答案 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:])]

这会将p1p2p2p3p3p4进行比较等等......

答案 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]