用户在运动中的距离

我正在编写一个应用程序,在用户走动时显示用户与固定点的距离(即每次用户移动时,显示用户到点的距离的标签都会更新)。 我使用了一个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]; } 

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

你是否过滤了旧的(caching的)职位? 你也应该根据精度进行过滤,你可能不需要低精度的位置。

你不会得到连续或定期的更新,callback只发生在位置改变。

假设该设备具有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 ... }