CL位置高程精度
Posted
技术标签:
【中文标题】CL位置高程精度【英文标题】:CLLocation elevation accuracy 【发布时间】:2012-01-07 02:31:10 【问题描述】:我有一个位置服务应用程序,其中提供了用户的海拔高度。不过,我发现 CLLocationManager 提供的高程精度非常不准确。当我两次测试相同的两个点时,有时海拔差是四十英尺,有时是一百英尺。有什么方法可以提高 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 英尺,我敢肯定这不是真的。
【问题讨论】:
【参考方案1】:由于卫星的geometry,从 GPS 卫星得出的高程本质上不如 GPS 的水平解法准确。您应该预计垂直精度通常比水平精度差 1.5 到 3 倍。这只是 GPS 的一个限制,也是为什么航空需要 WAAS 校正才能将 GPS 用于仪器进近。
当垂直精度为 20 或 30 米时,您应该预计高度会偏离 100 英尺。当您在房子周围走动时,期望它不会变化 19 英尺,这是不切实际的。
您可以做的是保持最近“良好”高度读数的滚动加权平均值(或Kalman filter),以帮助过滤测量误差。
【讨论】:
是的,这似乎是不幸的事实。 +1 以获得良好的解释和良好的链接。 即使情况更糟,也可以用来区分飞行和公路旅行吗?由于两种情况之间的海拔差异无论如何都会太大:***.com/q/52003623/1364053【参考方案2】:你试过什么代码? 这是提升的最佳代码,所以我认为除此之外没有任何其他内容:
-(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";
【讨论】:
我推荐的只是使用我的代码,因为这是 iDevices 可能的最佳精度。它仍然是一部手机,由于物理限制,准确度不是那么高。以上是关于CL位置高程精度的主要内容,如果未能解决你的问题,请参考以下文章