使用GPS提高测量距离的准确度

时间:2013-06-22 14:12:33

标签: ios gps core-location distance cllocationmanager

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

}

干杯!

1 个答案:

答案 0 :(得分:3)

通常地理位置以3种方式进行,具体取决于设置和设备硬件:

  • 手机广播
  • wifi mapping
  • GPS

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