在Python中迭代坐标对

2024-05-17 01:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份坐标表:

[(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),..]

我正在尝试编写代码,使我能够使用Haversine模块计算每一个之间的距离:

(伪代码)

^{pr2}$

有没有办法把坐标1和2拉进来,测量距离,2和3,然后测量这个距离,等等

我一直在尝试使用itertools和zip(),但我还没有任何运气。在


Tags: 模块代码距离zipitertools办法haversine运气
3条回答

如果要计算两个位置之间的距离(一个接一个,如^{所示)并向前看,可以尝试如下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

输出-

^{pr2}$

编辑- 如果您想获得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]

我不确定您想从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与{},p3与{}等等。。。。在

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

相关问题 更多 >