gpt4 book ai didi

python - 基于纬度/经度的点列表之间的距离

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:25 24 4
gpt4 key购买 nike

所以我有这个坐标列表,我需要它们之间距离的最终总和。

track = [[49.16967, 20.21491, 1343],
[49.17066, 20.22002, 1373],
[49.16979, 20.22416, 1408],
[49.17077, 20.22186, 1422],
[49.17258, 20.22094, 1467],
[49.17294, 20.21944, 1460]]

到目前为止,我已经有了计算两组坐标之间距离的基本公式

import math
def distance(lat_start, lon_start, lat_ciel, lon_ciel):
R = 6371000
lat_start = math.radians(lat_start)
lon_start = math.radians(lon_start)
lat_ciel = math.radians(lat_ciel)
lon_ciel = math.radians(lon_ciel)
DiffLat = lat_ciel - lat_start
DiffLon = lon_ciel - lon_start
a = math.sin(DiffLat/2) ** 2 + math.cos(lat_start) * math.cos(lat_ciel) * math.sin(DiffLon / 2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
return R * c

我陷入了下一步,我尝试创建一个不同的函数,该函数使用现有的距离函数,仅获取每组坐标并计算距离,然后将结果数字相加。
感谢您的帮助。

最佳答案

import math
from itertools import combinations

def distance(lat_start, lon_start, lat_ciel, lon_ciel):
R = 6371000
lat_start = math.radians(lat_start)
lon_start = math.radians(lon_start)
lat_ciel = math.radians(lat_ciel)
lon_ciel = math.radians(lon_ciel)
DiffLat = lat_ciel - lat_start
DiffLon = lon_ciel - lon_start
a = math.sin(DiffLat/2) ** 2 + math.cos(lat_start) * math.cos(lat_ciel) * math.sin(DiffLon / 2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
return R * c

def sum_distance(track):
return sum((map(lambda p: distance(*p[0][:2], *p[1][:2]), combinations(track, 2))))

my_track = [[49.16967, 20.21491, 1343],
[49.17066, 20.22002, 1373],
[49.16979, 20.22416, 1408],
[49.17077, 20.22186, 1422],
[49.17258, 20.22094, 1467],
[49.17294, 20.21944, 1460]]

print(sum_distance(my_track)) # 5252.0327870706005

说明

  1. 组合(...)来自 https://docs.python.org/2/library/itertools.html#itertools.combinations提供所有对的组合
  2. lambda p: distance(*p[0][:2], *p[1][:2]) 计算 a 的距离对,p[0] 和 p[1] 是对的第一个和第二个元素
  3. [:2] 是一个切片,用于获取前两个元素(即纬度/经度)
  4. *p[x][:2] 为距离函数的参数提供前两个元素的解包
  5. map(...) 生成所有对的距离
  6. sum(...) 计算对的距离

关于python - 基于纬度/经度的点列表之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com