由于iOS不能直接控制到GPS,一般来说我们都会使用CLLocationManager来获取地理位置信息,我们会使用
manager.desiredAccuracy = kCLLocationAccuracyBest;
来请求精确度最高的地理位置信息。但是有个时候请求的地理位置信息偏差很大。
不是误差的问题,是完全不能用的问题。其实 CLLocation
有一个horizontalAccuracy
属性,我们可以通过它来控制精确度问题。比如我们要求精确度为200米,就可以这样写:
- (void)locationManager:(CLLocationManager *)Lmanager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (newLocation.horizontalAccuracy < 200 && newLocation.horizontalAccuracy != -1){
//Many many code here...
} else {
[Lmanager stopUpdatingLocation]; //停止获取
[NSThread sleepForTimeInterval:10]; //阻塞10秒
[Lmanager startUpdatingLocation]; //重新获取
}
}
CLLocation
的 horizontalAccuracy
属性精确度是米,当值为-1的时候代表定位不可信,所以我们可以通过这个方式筛选掉不符合规格的数据,并且要求重新获取地理位置信息。