如何在Python中准确计算GPS距离

时间:2020-07-21 21:21:54

标签: python gps

我正在尝试更新GPS坐标之间的距离。我的错误是GPS可以在静止不动的情况下短距离移动。我目前正在每秒将新坐标添加到列表中,计算此秒与最后一秒之间的距离,然后将这些距离附加到新列表中,然后将它们全部加在一起。

问题是站立时距离的微小运动仍在不断累积。有人知道这样做的正确方法吗?

self.breadcrumbs = []

#Calc Linear Distance GPS
while 1:
    report = gpsp.get_current_value() #Retrieves GPS Values
    try:
        self.lat = report.lat
        self.lon = report.lon
        self.latlon = (self.lat, self.lon) #Put lat lon into tuple 
        self.breadcrumbs.append(self.latlon) #Append lat lon to breadcrumb list
        breadcrumb_distances = [] #Holds distances between latlon data points
        for i, b in enumerate(self.breadcrumbs):
            current_location = b
            last_location = self.breadcrumbs[i - 1]
            miles = geodesic(current_location, last_location).miles 
            feet = miles * 5280 #convert to feet
            breadcrumb_distances.append(feet)
        cumulative_distance = round(sum(breadcrumb_distances),2)
        print(cumulative_distance)
    except Exception as e:
        print(e)
    sleep(1)

2 个答案:

答案 0 :(得分:0)

没有单一的“正确”方法来做到这一点。问题在于,当您非常缓慢地移动时,“错误”的移动会使用户认为是实际的移动不堪重负。在获取错误数据和删除代表实际运动的数据之间,这是一种折衷。问题增加了您获取数据的速度越快,速度越慢。

一种方法是设置一个最小距离,该距离将导致您记录新数据。如果新点在上一个点的距离within之内,则放下该点。对于良好的选择,这将在实际停止时忽略运动。然后,您无需关心数据点之间的时间,或者您需要记录数据点的时间(或以某种方式指示间隙的位置和持续时间)。如果问题是由于停工期造成的,那可能是最好的。

另一种方法是降低记录频率。对于某些应用程序,退回5s或类似的值可能就足够了。

答案 1 :(得分:0)

如果您的GPS单元具有加速度计,则可以使用它来确定您是否在移动(我已经在android应用中实现了此方法)。
您可以使用GPS中的accuracy参数-如果当前读数的精度为10米,并且距最后一点的距离小于该距离,则忽略最后一个读数。