用户在运动时到达某个位置的距离

时间:2011-11-23 19:15:20

标签: ios objective-c core-location horizontal-accuracy

我正在编写一个应用程序,在用户走动时显示用户与固定点的距离(即,每次用户移动时,更新显示用户到该点的距离的标签)。我使用CLLocationManager,代码如下所示:

- (void)viewDidLoad
{
    locationManager=[[CLLocationManager alloc]init]; 
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation];      
}

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation      *)newLocation fromLocation:(CLLocation *)oldLocation 
{   
    CLLocationDistance meters = [newLocation distanceFromLocation:fixedPoint];
    self.distanceLabel.text = [[NSString alloc] initWithFormat:@"Distance: %.1f feet", meters*3.2808399];
}

应该显示从用户到该点的距离的标签不会不断更新,并且在更新时,它通常不会显示从用户到固定点的正确距离。我想知道是否有更好的方法让我尝试这样做,或者核心位置框架的基本限制使得这不可能。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

您是否过滤掉旧的(缓存)职位?您还应该根据准确度进行过滤,您可能不希望低精度位置。

您不会获得连续或定期更新,只有在位置发生变化时才会发生回调。

假设该设备具有GPS并且可以看到足够的GPS卫星以获得良好的位置,这可以正常工作。

-(void)locationManager:(CLLocationManager *)manager 
   didUpdateToLocation:(CLLocation *)newLocation 
          fromLocation:(CLLocation *)oldLocation {

    NSTimeInterval age = -[newLocation.timestamp timeIntervalSinceNow]; 

    if (age > 120) return;    // ignore old (cached) updates

    if (newLocation.horizontalAccuracy < 0) return;   // ignore invalid udpates

    ...
}