我正在使用CoreLocation框架,我很好奇它更新的频率,它真的不准确,我正在讨论从NSTimer调用方法来增加它的使用频率。我的代码是
ViewDidLoad中的
//location update
CLController = [[CoreLocationController alloc] init];
CLController.delegate = self;
[CLController.locMgr startUpdatingLocation];
我的虚空方法
- (void)locationUpdate:(CLLocation *)location {
int speedInt = [location speed]*2.23693629;
if(speedInt < 0){
speedInt = 0;
}
speedLabel.text = [NSString stringWithFormat:@"%d", speedInt];
}
- (void)locationError:(NSError *)error {
speedLabel.text = [error description];
}
答案 0 :(得分:6)
更新频率由desiredAccuracy
和distanceFilter
的组合确定(显然,用户移动了多少)。 distanceFilter
kCLDistanceFilterNone
和desiredAccuracy
kCLLocationAccuracyBest
或kCLLocationAccuracyBestForNavigation
NSTimer
将获得最多更新(但最快耗尽电量)。
使用CLLocationManager
无法获得更高的准确性。依靠{{1}}更新所需频率,对应用程序要求与用户不必不必耗尽其电池的愿望之间的合理平衡有一定的敏感度。
请参阅位置感知编程指南的Starting the Standard Location Service部分。另请参阅该指南中的Tips for Conserving Battery Power部分。
答案 1 :(得分:2)
您可以将CLLocationManager的desiredAccuracy属性分配给kCLLocationAccuracyBest:
- (void) viewDidLoad
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate= self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
}
希望这可以帮助你。
答案 2 :(得分:0)
按照您的代码意义,您可以添加:
CLController.locMgr.desiredAccuracy = kCLLocationAccuracyBest;
CLController.locMgr.distanceFilter = 10.0f; //To set updating distance up with x meter when you leaved the scope.
[CLController.locMgr startUpdatingLocation];
希望它可以帮到你。