1

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

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

4

1 回答 1

4

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

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以进行简单的距离计算。

于 2013-09-20T13:25:48.977 回答