首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于随机定时接收的位置坐标计算速度

基于随机定时接收的位置坐标计算速度
EN

Stack Overflow用户
提问于 2013-04-02 21:50:00
回答 5查看 1.6K关注 0票数 3

我正在编写一个应用程序,它需要知道您正在行驶的速度。我的应用程序与几个设备通信,每个设备都有不同的内置GPS接收器。当我使用的硬件报告速度时,我使用该参数。但在某些情况下,我的硬件不报告速度,只报告纬度和经度。

在这种情况下,我一直在做的是标记收到第一个坐标的时间,然后等待另一个坐标进入。然后,我计算了行驶的距离,并除以经过的时间。

我遇到的问题是一些硬件报告定位很快(每秒5-10次),而另一些报告定位很慢(每秒0.5次)。当我快速接收GPS位置时,由于GPS接收机固有的误差,我的算法无法准确计算速度。换句话说,由于GPS的不准确,位置会自然地移动,而且由于从最后接收到的位置经过的时间跨度很小,我的算法认为我们在短时间内移动了很远-这意味着我们正在快速移动(而实际上我们可能是静止不动的)。

我怎样才能平均速度来避免这个问题?似乎这个过程必须根据点数的速度进行自适应。例如,如果我简单地对收集的最后5个点进行平均来进行速度计算,这可能对“快速”报告单位很有效,但它会损害我对“慢”报告单位的准确性。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-03 02:35:44

使用一个简单的过滤器:

只有当一个位置距离上次拍摄的位置超过10米时,才采取该位置。

然后计算lastGood和thisGood之间的距离,并除以timeDiff。

你还想忽略所有低于5 5km/h的速度,因为GPS是最嘈杂的。

你可以通过计算上一个和这个之间的方向来进一步优化,如果它保持稳定,你就接受它。这有助于过滤。

票数 1
EN

Stack Overflow用户

发布于 2013-04-02 22:03:17

我会平均过去X秒的速度。让我们选择X=3。对于你的快速记者来说,这意味着你的平均速度大约有20个数据点。对于慢吞吞的记者来说,这可能只会给你带来6个数据点。这应该会保持相当高的准确性,甚至是全面的。

票数 1
EN

Stack Overflow用户

发布于 2013-04-02 22:07:40

您可能已经有一个现有的数据点结构,可以从其中提取linq查询?

根据我们需要考虑负向量的说明,以及在这里说明已知误差范围的建议,是一个更复杂的示例:

代码语言:javascript
复制
class GPS
{
    List<GPSData> recentData;
    TimeSpan speedCalcZone = new TimeSpan(100000);
    decimal acceptableError = .5m;

    double CalcAverageSpeed(GPSData newestPoint)
    {
        var vectors = (from point in recentData
                       where point.timestamp > DateTime.Now - speedCalcZone
                       where newestPoint.VectorErrorMargin(point) < acceptableError
                       select new
                       {
                           xVector = newestPoint.XVector(point),
                           yVector = newestPoint.YVector(point)
                       });
        var averageXVector = (from vector in vectors
                              select vector.xVector).Average();
        var averageYVector = (from vector in vectors
                              select vector.yVector).Average();
        var averagedSpeed = Math.Sqrt(Math.Pow(averageXVector, 2) + Math.Pow(averageYVector, 2));

        return averagedSpeed;
    }
}

但正如评论中指出的那样,没有一个神奇的算法,你必须根据自己的情况和需求对其进行调整。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15765870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档