gpt4 book ai didi

python - 计算坐标列表(lat,lng)之间的地理距离

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

我正在编写一个 Flask 应用程序,使用从 GPS 传感器中提取的一些数据。我可以在 map 上绘制路线,并且我想计算 GPS 传感器行驶的距离。一种方法可能是只获取开始和结束坐标,但是由于传感器行进的方式,这是非常不准确的。因此,我对每 50 个传感器样本进行采样。如果实际传感器样本大小为 1000,我现在将有 20 个样本(通过每 50 个样本提取)。

现在我希望能够将我的样本列表通过一个函数来计算距离。到目前为止,我已经能够使用包 geopy,但是当我获取大型 gps 样本集时,我确实会收到“太多请求”错误,更不用说处理请求时我会有额外的处理时间,这不是我想要的想要。

是否有更好的方法来计算包含经纬度坐标的列表元素的累积距离?

positions = [(lat_1, lng_1), (lat_2, lng_2), ..., (lat_n, lng_n)]

我找到了很多不同的数学方法,仅使用 2 个坐标(lat1、lng1 以及 lat2 和 lng2)来计算距离,但没有一个支持坐标列表。

这是我当前使用 geopy 的代码:

from geopy.distance import vincenty

def calculate_distances(trips):
temp = {}
distance = 0
for trip in trips:
positions = trip['positions']
for i in range(1, len(positions)):
distance += ((vincenty(positions[i-1], positions[i]).meters) / 1000)
if i == len(positions):
temp = {'distance': distance}
trip.update(temp)
distance = 0

trips 是一个列表元素,包含有关旅行的键值对信息(持续时间、距离、开始和停止坐标等)的字典,而 trips 中的 positions 对象是一个列表元组坐标如上图所示。

trips = [{data_1}, {data_2}, ..., {data_n}]

最佳答案

这是我最终使用的解决方案。如果您想自己查看它的作用,它被称为 Haversine(距离)函数。

我也稍微改变了我的方法。我的输入 (positions) 是一个元组坐标列表:

def calculate_distance(positions):
results = []
for i in range(1, len(positions)):
loc1 = positions[i - 1]
loc2 = positions[i]

lat1 = loc1[0]
lng1 = loc1[1]

lat2 = loc2[0]
lng2 = loc2[1]

degreesToRadians = (math.pi / 180)
latrad1 = lat1 * degreesToRadians
latrad2 = lat2 * degreesToRadians
dlat = (lat2 - lat1) * degreesToRadians
dlng = (lng2 - lng1) * degreesToRadians

a = math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(latrad1) * \
math.cos(latrad2) * math.sin(dlng / 2) * math.sin(dlng / 2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
r = 6371000

results.append(r * c)

return (sum(results) / 1000) # Converting from m to km

关于python - 计算坐标列表(lat,lng)之间的地理距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238665/

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