我目前正在测量用户行走/运行/等的距离。当我将我的结果与其他应用程序的结果进行比较时,我的结果不如其他应用程序那么准确(即 100m 是正确的,而我的结果约为 50m)。那么如何提高准确性以获得更准确的结果呢?
到目前为止我正在做的是:
初始化 CLLocationManager:
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
locationManager.distanceFilter = 10;
和:
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *lastLocation = [locations lastObject];
NSTimeInterval age = -[lastLocation.timestamp timeIntervalSinceNow];
if (age > 30.0) return;
if (lastLocation.horizontalAccuracy < 0) return; // ignore invalid updates
if (previousLocation == nil || previousLocation.horizontalAccuracy < 0)
{
previousLocation = lastLocation;
return;
}
CLLocationDistance distance = [lastLocation distanceFromLocation:previousLocation];
if ([delegate respondsToSelector:@selector(currentDistance:)])
{
[delegate currentDistance:distance];
}
previousLocation = lastLocation;
}
干杯!
最佳答案
通常,根据设置和设备硬件,可以通过 3 种方式进行地理定位:
- 蜂窝 radio
- 无线网络映射
- 全局定位系统
-desiredAccuracy
属性设置应打开这三种模式中的哪一种。另一方面,您需要最新响应的最准确度是。首先,您将获得 radio (仅适用于蜂窝设备),如果 WiFI 已打开并且蜂窝数据也已打开,您将获得 WiFi 地理定位,通常在 +- 100m 左右,并且在 GPS 之后很多(如果可用)。 GPS的延迟是由于卫星搜索和电池优化两个原因造成的。对于运行,我建议您根据需要使用kCLLocationAccuracyBestForNavigation
,一旦 GPS 发挥作用,您应该会获得接近 +-10m 的值。
另一件事是将 -distanceFilter
设置为 5 米,如果 CoreLocation Manager 获得增量 >= 5 米的新测量值,它将调用委托(delegate)方法。
如果您想排除水平精度大于某个值的位置,只需添加另一个逻辑条件即可。
我建议您也阅读这些答案 link
关于ios - 通过 GPS 提高测量距离的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251657/