使用CLLocationManager
时,我注意到CLLocation
生成的每个didUpdateToLocation
点似乎存在很大的误差。我按照生成它们的顺序使用这些点的数组来计算用户移动的总距离。
由于这些读数不准确,我注意到在完全固定的设备上运行应用程序可能会导致“移动”的距离很大,而不会发生任何实际的移动。
这是我用来计算距离的代码
- (double) sendTotalDistance
{
if (locations.count < 2) return 0;
double howFar = 0.0;
for (int j=0; j<locations.count-1; j++)
{
howFar += [[locations objectAtIndex:j] distanceFromLocation:[locations objectAtIndex:j+1]];
}
return howFar;
}
问题:补偿这些读数的随机误差的最佳方法是什么?
我正在考虑对点进行线性回归,但当然这会假设用户正在排成一行。我一直在尝试集思广益,在计算中包含读数的准确性,但我能想到的所有方法都会做出很多假设或引入其他形式的错误。
更新:我现在正在尝试提高更新率并平均一些值。问题是这假设错误是均匀分布的。
更新:我一直在记录程序报告的各个位置,我注意到了描述中的speed=-1.0
变量。这个变量有多准确?如果它足够准确,似乎可以忽略小于或接近0速度的测量值。