2013-06-22 51 views
2

我目前正在测量用户走/跑/等的距离。当我将结果与其他应用程序的结果进行比较时,我的结果与其他应用程序的结果并不相同(即100m是正确的,我的结果大约为50m)。那么,如何提高准确度以获得更准确的结果?提高GPS测量距离的精度

我在做什么,到目前为止是:

初始化的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

一般的地理定位在3种方式根据设置和设备硬件制成:

  • 蜂窝无线电
  • wifi的映射
  • GPS

-desiredAccuracy属性集其中这三个的模式应该打开。另一方面,你需要最准确的答案是最准确的。首先,您将获得无线电(仅适用于手机设备),如果WiFI处于打开状态并且手机数据处于打开状态,您将获得WiFi地理定位,一般在+ - 100米左右,并且在GPS后(如果有的话)会有很多。 GPS的延迟是由于卫星和电池优化的两个搜索。对于跑步,我建议你按照期望的精度使用kCLLocationAccuracyBestForNavigation,一旦GPS起作用,你应该可以在+10m附近获得数值。
另一件事是将-distanceFilter设置为5米,如果CoreLocation Manager获得一个delta> = 5米的新测量值,它将调用委托方法。
如果要排除水平精度大于某个值的位置,只需添加另一个逻辑条件即可。
我建议您也阅读这些回答link