我有一个位置服务应用程序,其中提供了用户的海拔。然而,我发现CLLocationManager提供的高程精度是非常不准确的。当我测试相同的两个点两次时,有时高程差是40英尺,有时是100英尺。有没有什么方法可以提高CLLocation的垂直精度,或者是否有不同的方法来获取用户的高程(第三方库)?我已经尝试过检查CLLocationManager提供的newLocation的verticalAccuracy属性,如果还不够,就抛出它,但即使它足够“准确”,它仍然经常不准确。耽误您时间,实在对不起!
现在我使用的是:
if([newLocation verticalAccuracy] < 30) {
if(isCustomary)
altitudeLabel.text = [NSString stringWithFormat:@"%.2f feet", ([newLocation altitude] * 3.2808399)];
else
altitudeLabel.text = [NSString stringWithFormat:@"%.2f meters", [newLocation altitude]];
}该代码的问题:通常情况下,verticalAccuracy永远不会低于30,即使低于30,也仍然不够准确;我在我的房子周围(一个故事)测试了代码,它显示海拔高度变化到19英尺,我确信这不是真的。
发布于 2011-11-29 11:36:29
由于卫星的geometry,由GPS卫星得到的高程固有地比由GPS得到的水平解的精度要低。你应该期望垂直精度通常比水平精度差1.5到3倍。这只是GPS的局限性,以及为什么航空需要WAAS校正,然后才能使用GPS进行仪表方法。
当垂直精度是20或30米时,你应该期望高度下降到100英尺。当你在不切实际的房子里走来走去时,期望它不会变化19英尺。
您可以做的是对最近的“良好”高度读数进行滚动加权平均(或Kalman filter),以帮助过滤测量误差。
发布于 2011-11-29 11:23:49
你尝试过什么代码?这是最好的高程代码,所以我认为没有什么比这个更好的了:
-(void)awakeFromNib {
locmanager = [[CLLocationManager alloc] init];
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
[locmanager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
heightMesurement.text = [NSString stringWithFormat: @"%.2f m", newLocation.altitude];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
heightMesurement.text = @"0.00 m";
}https://stackoverflow.com/questions/8282169
复制相似问题