我正在尝试更新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)
答案 0 :(得分:0)
没有单一的“正确”方法来做到这一点。问题在于,当您非常缓慢地移动时,“错误”的移动会使用户认为是实际的移动不堪重负。在获取错误数据和删除代表实际运动的数据之间,这是一种折衷。问题增加了您获取数据的速度越快,速度越慢。
一种方法是设置一个最小距离,该距离将导致您记录新数据。如果新点在上一个点的距离within之内,则放下该点。对于良好的选择,这将在实际停止时忽略运动。然后,您无需关心数据点之间的时间,或者您需要记录数据点的时间(或以某种方式指示间隙的位置和持续时间)。如果问题是由于停工期造成的,那可能是最好的。
另一种方法是降低记录频率。对于某些应用程序,退回5s或类似的值可能就足够了。
答案 1 :(得分:0)
如果您的GPS单元具有加速度计,则可以使用它来确定您是否在移动(我已经在android应用中实现了此方法)。
您可以使用GPS中的accuracy
参数-如果当前读数的精度为10米,并且距最后一点的距离小于该距离,则忽略最后一个读数。