Gps I';我收到一个关于纬度和经度的回电,我怎样才能最好地计算出;“当前速度”;,和其他派生值?

Gps I';我收到一个关于纬度和经度的回电,我怎样才能最好地计算出;“当前速度”;,和其他派生值?,gps,Gps,(我认为这个问题与平台无关,但我恰好在为Nexus One编写代码) 关于“当前速度”:我每隔一秒钟就会收到一个回调,告诉我当前的纬度和经度是多少。我可以计算当前位置和前一位置之间的距离,以便跟踪累计距离和累计时间。有了这些,我可以说整个旅程的平均速度是多少 但如何计算当前速度?我想我需要使用最近的N个样本,对吗?我这样想对吗?对N来说,什么是好的经验法则?多少个样本,或者多少秒前 关于“停止时间”:如果我只是站着不动,我仍然可以得到稍微不同的纬度和经度报告给我,对吗?所以,决定我不是真的移动意

(我认为这个问题与平台无关,但我恰好在为Nexus One编写代码)

关于“当前速度”:我每隔一秒钟就会收到一个回调,告诉我当前的纬度和经度是多少。我可以计算当前位置和前一位置之间的距离,以便跟踪累计距离和累计时间。有了这些,我可以说整个旅程的平均速度是多少

但如何计算当前速度?我想我需要使用最近的N个样本,对吗?我这样想对吗?对N来说,什么是好的经验法则?多少个样本,或者多少秒前

关于“停止时间”:如果我只是站着不动,我仍然可以得到稍微不同的纬度和经度报告给我,对吗?所以,决定我不是真的移动意味着说“之前的X个LOC彼此之间的距离都在Y米以内”,对吗?我这样想对吗?X和Y的经验法则是什么

甚至关于“距离”:我会不会因为我真的在偷工减料而轻描淡写?是否有一个算法或经验法则来确定我何时“转向”以及是否应该添加一点软糖


编辑:我道歉:我为浪费人们的时间和善意感到难过,但遗憾的是,这个设备给了我速度。我认为这不是因为在模拟器中不是,而是在真正的设备上。谢谢大家。我仍然需要编写一些经验法则代码,但速度是最大的挑战

编辑:我收回道歉。在我最初的问题中,我写道距离也是一个派生值。如果我只使用原始GPS数据,我会因为不准确而夸大距离。我可能走直线,但原始GPS lat/long会摆动,因此如果我通过测量点之间的距离来计算总距离,我会夸大它。这里有一些与此问题相关的链接





当前速度是位置(现在)和位置(以前)之间的差值,因此要获得当前速度,只需比较当前位置和上一个位置


但是:由于这很容易受到时间/位置跟踪的小误差的影响,因此不可靠,因此您必须在过去的位置上对其进行平均。多少取决于用例,时间越长,“当前”速度越低,但越精确。

记住位置的简短历史,返回几秒钟。5秒应该会给你一个相当准确的结果,更新相当快

// delay is the time difference between the 2 samples you have
delay = 5;   // 5 second delay

// figure out how far along x and y we have moved since last time
dx = newx - oldx;
dy = newy - oldy;

// distance travelled
distance = sqrt(dx*dx + dy*dy);

// find the speed. if the positions were measured in metres and the time in seconds
// this will be the average speed in metres per second, over the last 5 seconds
speed = distance / delay;
采样之间的等待时间越长(例如,如果保持最后30个位置采样并使用30秒延迟),您的答案越稳定(即,噪音越小),但对速度变化的反应越慢

你为什么要添加这些延迟内容?嗯,你手机里的GPS装置可能不是很准确。如果你站着不动,它每秒返回的位置可能会摆动一点。这种抖动噪音会让你看起来像是在房间里随机奔跑,可能会导致你报告说你的速度适中,即使你根本没有移动。当你站着不动时,我列出的解决方案并没有真正的帮助,因为30秒前的结果和1秒前的位置一样错误。你真正需要做的是在一段时间内平均位置,然后将其与稍早时间的平均位置进行比较。例如

取10个位置样本,取平均值。这是位置1。
再抽取10个样本,取平均值。这是位置2。
使用上述代码的这2个位置获得速度


同样,你可以采集的样本越多,你的位置就会变得越准确和稳定,但这会使你的速度测量响应性变差。

关于“捷径”,你总是可以近似一条曲线(使用样条曲线或进行真正的过冲-回归),否则我认为你走在了正确的轨道上


关于有多少个样本静止不动,而不是取一个常数N,我将查看样本的偏差。

关于当前速度:大多数gps设备都会自行向您发送此信息。

您的方法不是真的错误,而是天真。这些任务有一个巨大的数学基础,这就不足为奇了。您可以获得比“平均最后N个值”更好的结果

首先,Kalman滤波器易于实现和调整,通常足以用于实际任务

此外,不要试图平滑或平均GPS信号-GPS接收器本身会这样做。相反,根据车辆(或人)的预期加速度进行过滤


最后,如果你能得到这些信息,瞬时速度可以从频移中计算出来。

@dbemerlin-我的整个问题都是关于你答案中的“但是”部分。。。。这取决于使用情况:要在驾驶时显示速度,时间范围应约为5秒,要在地图上显示运输(跟踪)中卡车的速度,可能需要一分钟或更长时间…如果您从设备获取此数据,特别是使用Sirf芯片组的,那么velocity可能会作为返回数据的一部分提供。我的问题实际上只是关于5秒。这是你编造的,还是来自GPS不精确的实际现场经验?你怎么知道4不是更好的答案,6不是更好的答案?我已经更新了一些,试图让它更清楚。基本上,你能做的样本越多,你的答案就越稳定,但它对速度变化的反应就越慢。应用程序的准确度和响应速度取决于您。它还取决于你在这个位置行驶的速度,有多少噪音来自f