检查GPS是否正在移动或停止

时间:2013-09-20 13:15:12

标签: algorithm gps

我正在尝试记录GPS停止的每个地方至少X分钟,但我有  识别它的一些问题。我到目前为止所做的是检查速度是否低于最后一点Y km / h的每一点,但这是沉重(和愚蠢)的方式,我相信(尽管我没有找到任何东西)那里必须是一个更好的方法。我想知道是否有一个现有的算法可以做到这一点,或者你们是否可以提供一些关于去哪里的指导。

我没有任何传感器访问权限,每6秒只有GPS位置。

1 个答案:

答案 0 :(得分:3)

您无需检查速度。您需要做的就是检查位置。假设您有一系列职位,您可以执行以下操作:

int secondsStopped = 0;
Position stoppedPos = positions[0];

for (int i = 1; i < positions.Length; ++i)
{

    if (positions[i] == stoppedPos)
    {
        secondsStopped += 6;
    }
    else
    {
        // it moved.
        if (secondsStopped >= TARGET_TIME)
        {
            output("Stopped at " + stoppedPos + " for " + secondsStopped + " seconds.");
            stoppedPos = positions[i];
            secondsStopped = 0;
        }
    }
}
// check last period
if (secondsStopped >= TARGET_TIME)
{
    output("Stopped at " + stoppedPos + " for " + secondsStopped + " seconds.");
}

因为GPS通常不会在每个时期给你完全相同的位置,即使事物完全静止,你可能需要将等同性检查更改为:

if (ComputeDistance(positions[i], stoppedPos) <= SOME_SMALL_VALUE)

我不知道SOME_SMALL_VALUE应该是什么。你必须尝试找出合理的东西。

您还必须找到距离公式。不应该太难。而且由于GPS在6秒内不会移动很远,你可以假装世界是平坦的(使距离计算非常容易)。我不知道您的GPS数据是什么样的,但假设您获得了纬度和经度,您可以查看我的文章Computing Track Information in GPS进行简单的距离计算。