2

我目前正在测量用户步行/跑步/等的距离。当我将我的结果与其他应用程序的结果进行比较时,我的结果不如其他应用程序那么准确(即 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;  

}

干杯!

4

1 回答 1

3

通常根据设置和设备硬件以 3 种方式进行地理定位:

  • 蜂窝无线电
  • wifi映射
  • 全球定位系统

-desiredAccuracy属性设置应该打开这三种模式中的哪一种。另一方面,您要求最新响应的最准确度是。首先,您将获得无线电(仅适用于手机设备),如果打开 WiFI 并且打开手机数据,您将获得 WiFi 地理位置,通常在 +- 100m 左右,并且在 GPS 之后(如果可用)很多。GPS的延迟是由于两次搜索卫星和电池优化。对于跑步,我建议您使用所需的精度kCLLocationAccuracyBestForNavigation,一旦 GPS 发挥作用,您应该获得接近 +-10m 的值。
另一件事设置-distanceFilter为 5 米,如果 CoreLocation Manager 获得一个 delta >= 5 米的新测量值,它将调用委托方法。
如果要排除水平精度大于某个值的位置,只需添加另一个逻辑条件。
我建议您也阅读这些答案链接

于 2013-06-22T14:35:56.077 回答