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



我试图记录GPS停止至少X分钟的每个地方,但我有 识别它的一些问题。到目前为止,我所做的是遍历每一点,检查速度是否从最后一个点开始小于 Y 公里/小时,但这是沉重(和愚蠢)的方式,我相信(虽然我没有找到任何东西)一定有更好的方法。我想知道是否有现有的算法可以做到这一点,或者你们是否可以就去哪里提供一些指导。

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

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

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数据是什么样子的,但假设你得到了纬度和经度,你可以看看我的文章 在GPS中计算轨迹信息 进行简单的距离计算。

最新更新