【发布时间】:2017-05-05 10:53:19
【问题描述】:
我正在编写一个烧瓶应用程序,使用从 GPS 传感器中提取的一些数据。我能够在地图上绘制路线,并且我想计算 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 中的位置对象是一个元组坐标列表,如上图所示.
trips = [{data_1}, {data_2}, ..., {data_n}]
【问题讨论】:
-
所以你想要每个点之间的距离?
-
是的。或者好吧,我想要所有距离的总和。