iOS CoreLocation 海拔高度

Posted

技术标签:

【中文标题】iOS CoreLocation 海拔高度【英文标题】:iOS CoreLocation Altitude 【发布时间】:2011-06-19 17:17:36 【问题描述】:

ios 4.0 之前,CoreLocation 可以正确报告高度,现在它始终报告为 0 英尺。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
 
    NSString *tLatitude  = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude]; 
    NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude];
    /*  the following returns 0 */
    NSString *tAltitude  = [NSString stringWithFormat:@"%i",    newLocation.altitude];

    /* theres more code, but it's not relevant, 
                      and this worked prior to iOS 4.0*/
    [manager stopUpdatingLocation];

不能在设备和模拟器上工作,有没有其他人遇到过这个问题?

【问题讨论】:

你是在设备上测试,还是在模拟器上测试? 【参考方案1】:

如果您使用 startMonitoringSignificantLocationChanges,这是 iOS 4.0 的新功能,那么您将无法获得海拔更新。这种低功耗模式只使用手机信号塔来确定用户的位置,这种方法不报告高度。

更一般地说,iPhone 可以通过三种方式确定您的位置——手机信号塔、Wi-Fi 和 GPS。只有在使用 GPS 时,您才能获得高度。因此,即使您将desiredAccuracy 设置设置为非常精确以强制设备使用 GPS,如果用户在室内,iPhone 也可能无法获得 GPS 信号,并且会回退到手机或 wi-fi。在这种情况下,您将无法获得高度。还要考虑使用 iPod Touch 的用户——它只能通过 wi-fi 获取位置,因此也不会报告高度。

【讨论】:

【参考方案2】:

您可以尝试两件事。首先,尝试将位置管理器的desiredAccuracy 设置为kCLLocationAccuracyBest

如果这不起作用,请尝试删除 [manager stopUpdatingLocation];,并在带有高度的 didUpdateToLocation 中添加一个 NSLog。有时它需要在显示高度之前缩小一点。

【讨论】:

kCLLocationAccuracyBest 一直被设置,移除 stopUpdatingLocation 没有任何效果。【参考方案3】:

来自Core Location Data Types Reference:

CLLocationDistance 数据类型(高度的数据类型)是 double。您用于stringWithFormat 的格式化程序是integer。您需要首先将您的高度转换为 integer,或使用 double (%f) 格式化程序。

【讨论】:

我正在将高度转换为整数。正如我所说,这在 iOS 4.0 之前完美运行(即没有更改代码)。 另外,我拥有它的方式/给了/我完美的高度,例如 5280 英尺。 @WrightsCS 您是否按照建议尝试了双重格式化程序,看看是否有所作为?【参考方案4】:

核心位置并不总是立即报告高度。我通常在我的“成功”委托方法中检查零高度。如果高度仍然是 0,我会继续检查,否则,我会打开 CoreLocation。

【讨论】:

以上是关于iOS CoreLocation 海拔高度的主要内容,如果未能解决你的问题,请参考以下文章

iOS核心笔记—CoreLocation框架-基础

如何在 iOS 上使用气压计获取更准确的海拔数据

高度始终为 0。我无法获得海拔高度

已经有了DEM,怎么用arcgis做出海拔高度分布图??

如何根据平均海平面计算海拔高度

c#获取位置的海拔高度