我正在尝试记录GPS停止的每个地方至少X分钟,但我有 识别它的一些问题。我到目前为止所做的是检查速度是否低于最后一点Y km / h的每一点,但这是沉重(和愚蠢)的方式,我相信(尽管我没有找到任何东西)那里必须是一个更好的方法。我想知道是否有一个现有的算法可以做到这一点,或者你们是否可以提供一些关于去哪里的指导。
我没有任何传感器访问权限,每6秒只有GPS位置。
答案 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进行简单的距离计算。