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位置高程精度的主要内容,如果未能解决你的问题,请参考以下文章

IfcSite

iPhone核心位置:计算总高程损失/增益

如何利用GlobalMapper基于谷歌高程生成剖面图

JS高程5.引用类型Array类型的位置方法,迭代方法,归并方法

南方cass导入的高程点与原图不在同一位置是啥原因?

arcgis从dem底图中获得高程属性