如何在java

时间:2017-06-03 14:16:22

标签: java android gps interpolation

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

2 个答案:

答案 0 :(得分: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)这将从当前位置加上向量乘以速度乘以速度再乘以自上次更新以来的时间。您最终会根据之前的行驶速度和行驶方向预测汽车的位置

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

答案 1 :(得分:0)

使用线性预测,Polymer有很好的答案。但是,如果您需要,还有一些更好的预测方法。

我将使用的是双指数平滑。这不仅会考虑以前的职位,还会考虑所有其他职位。

如果您的GPS也能提供每次检测的精确度,您可以使用卡尔曼滤波器。不是一个简单的过滤器,而是一个非常好的过滤器。