2017-06-03 22 views
-1

我正在尝试使用Android构建实时汽车监控应用程序。这些汽车将以他们当前的位置出现在地图上。问题是通过GPS更新位置很慢。所以建议的解决方案是使用插值,并获取缺失的坐标,直到GPS更新位置。我发现所有提出的解决方案都需要我们有两个GPS坐标点来插入它们之间,但由于我试图实时工作,因此我只有最初的GPS坐标加起来。任何人都可以帮助我如何实现这一目标?或者还有其他建议的方法可以使用吗?如何在java中实时插入GPS读数

+0

我不明白,如果它是实时的,你可以有很多以前的仓位存储?也许不是第一次更新,但从那时起.. – cYrixmorten

+0

是的,但我无法获得下一个位置,并在它和我当前的位置之间进行插值,以便在地图上进行流畅的动画@cYrixmorten – prog

回答

1

为此,您将必须计算车辆从前两个位置(距离/时间,最好是米/秒)的平均速度。由此,您可以构造一个矢量并将其添加到最新的位置矢量,并在下一次更新之间每隔一秒将其自身乘以它自己。下面简单的伪代码:

prevPos = vector 
currentPos = vector 

prevPosTime = time 
currentPosTime = time 

speed = ((currentPos - prevPos).magnitude)/(currentPosTime - prevPosTime) 

waitingtime = 0 
until currentPos change: 
    assumedLocation = currentPos + ((currentPos - prevPos).normalized * speed * waitingtime) 
    wait(1s) 
    waitingtime += 1 

我知道这是令人难以置信的基本的,但我希望你得到我这个要去的地方的要点。

编辑 - 只是更多的解释,就是我张口闭口关于

(currentPos - prevPos).normalized这是车辆的最后已知方向。这可以通过将其乘以任何值来缩放

(currentPos - prevPos).magnitude这是最后已知的SPEED。我们不能使用归一化的矢量,因为规范化'删除'任何缩放。我们基本上只是计算矢量的大小,这就是我们的速度。

currentPos + ((currentPos - prevPos).normalized * speed * waitingtime)这增加了从当前位置乘以再乘以自上次更新以来的时间的速度的方向的矢量。您最终预测汽车的位置应该基于之前的行驶速度和行驶方向

建议编辑: 重要提示,这是预测,而不是内插。如果我们知道两个值,我们将使用插值,但由于一个未知,我们正在使用预测。

+0

我明白这一点,但是,你的意思是通过这里归一化'(currentPos - prevPos)。normalized' – prog

+0

好吧,所以一个向量的归​​一化版本是一个幅度为1的向量。我可以计算如下(首先我们需要长度):'length = sqrt (vector.x^2 + vector.y^2)''normal = new vector(vector.x/length,vector.y/length)' – Polymer

+0

视频链接,如果您想要更详细的解释: https:// www.youtube.com/watch?v = 7fn03DIW3Ak – Polymer

0

聚合物使用线性预测有一个很好的答案。但是,如果您需要它们,有一些更好的预测方法。

我会用什么是双指数平滑。这不仅将以前的位置考虑在内,还包括所有其他位置。

如果您的GPS也可以给出每次检测的精度,您可以使用卡尔曼滤波器。不是一个简单的过滤器,而是一个很好的过滤器。