我有一个MKMapView,每次加载视图时或调用showLocation
自定义类方法时,都将删除注释。
我需要精度是最好的
-(void)viewDidLoad {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
[locationManager startUpdatingLocation];
}
-(IBAction) showLocation:(id) sender{
[locationManager startUpdatingLocation];
}
- (void) locationManager:(CLLocationManager *) manager
didUpdateToLocation:(CLLocation *) newLocation
fromLocation:(CLLocation *) oldLocation {
// start geocoding with newLocation coordinate which will automatically set annotation.
SVGeocoder *geocodeRequest = [[SVGeocoder alloc]
initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude)];
[geocodeRequest setDelegate:self];
[geocodeRequest startAsynchronous];
[geocodeRequest release];
[locationManager stopUpdatingLocation];
}
我的问题是
didUpdateToLocation
方法何时被调用?我执行[locationManager startUpdatingLocation]
时仅在找到新位置之后?当用户旅行且静止不动时,我面临一些奇怪的问题。
假设用户从点A-> B-> C-> D出发,两点之间的间隔为1分钟。当我在点C调用方法时,有时它返回点A的坐标,有时返回点B,有时返回C。这只是随机的。
当我静止不动时,这更加奇怪。即使我已连接到家庭WiFi,当我调用
showLocation
方法时,也会得到不同的坐标。我正在考虑实现didUpdateToLocation以在5秒内获得最佳结果。如果在5秒内找到我定义的精度的特定位置,则使用坐标。如果没有,请使用5秒钟内的最佳值。但是由于我是新手,所以我不确定如何编写类似的代码。我读了NSTimer,看来它可能有用。
有什么建议吗?
在此先多谢!
最佳答案
您从A点收到位置的原因之一是CoreLocation返回了它最先拥有的最后一个有效位置,直到可以获取更准确的位置为止。当您呼叫[locationManager startUpdatingLocation];
时,它将一遍又一遍地返回-didUpdateToLocation
,直到您被注册为止,最后再呼叫-stopUpdatingLocation
。
我认为您只需要花一点时间就可以得到更好的位置修复,然后再停止更新位置。我会考虑将停止更新的位置从您的-didUpdateToLocation
移至其他方法。