遍历 Python 中的坐标对

Iterating over pairs of coordinates in Python

我有一个坐标列表:

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

我不完全确定你想从 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 等进行比较......

如果我没理解错的话,您需要做的就是迭代
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 以提高内存效率。

如果您想计算两个位置之间的距离(一个接一个,如 d 所示,向前看),您可以尝试 range,如下所示。

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]