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

2024-06-10 03:47:13 发布

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

我正在尝试更新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)

Tags: selfreport距离列表locationcurrentlatlongps
1条回答
网友
1楼 · 发布于 2024-06-10 03:47:13

没有一种“正确”的方法可以做到这一点。问题是,当你移动非常缓慢时,“错误”的移动压倒了用户认为的实际移动。在获取出错的数据和删除代表实际运动的数据之间,这是一种折衷。问题在于获取数据的速度越快,速度越慢

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

另一种方法是降低测井频率。对于某些应用,后退到5s或类似时间就足够了

相关问题 更多 >