基本上我正在制作一个应用程序,该应用程序应该记录某人旅行的路径和数据。我在准确性和确定不准确的报告方面遇到了一些麻烦。这是我的 iPhone 记录的路径图像。红线是记录的路径,粉红色是我实际走的路(为巨大的屏幕截图道歉):
我用于记录数据的委托(delegate)如下所示:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (newLocation.horizontalAccuracy < 0) return;
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
// The "> 50.0f" is to hopefully throw out inaccurate points
if (locationAge > 5.0 || [newLocation distanceFromLocation:oldLocation] > 50.0f) return;
[[self locationPoints] addObject:newLocation];
[self updateView];
}
我看到的一些建议是使用过滤器来检查数据是否适合投影路径。这是最好的方法吗?
最佳答案
您可以添加对 newLocation.horizontalAccuracy
的检查:
if ((newLocation.horizontalAccuracy > 0.0) && (newLocation.horizontalAccuracy < 10.0))
或者,对于您的情况:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (newLocation.horizontalAccuracy < 0) return;
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if ((locationAge > 5.0)||(newLocation.horizontalAccuracy < 0.0)||(newLocation.horizontalAccuracy > 10.0)) return;
[[self locationPoints] addObject:newLocation];
[self updateView];
}
这个 (locationAge > 5.0)
条件看起来很奇怪。你真的想要吗?如果您将其保留在您的应用程序中,则当设备失去适当的 GPS 信号 >5.0s
时,您的应用程序将停止更新。
还有一件事:您是否记得设置您的 locationManager
:
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
您还应该知道这会消耗大量电池电量,但用于测试...
关于iphone - 使用 CoreLocation 防止零星坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707638/