1

来自 Apple 的文档:

@property(readonly, nonatomic) CMMagneticField magneticField

返回由磁力计测量的磁场。(只读)

此属性的值是设备观察到的总磁场,它等于地球的地磁场加上从设备本身及其周围环境引入的偏置。

@property(readonly, nonatomic) CMCalibratedMagneticField magneticField

此属性返回的 CMCalibratedMagneticField 为您提供了设备附近的总磁场,没有设备偏差。与 CMMagnetometer 类的磁场属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏置。

如果我想获得设备与北方的度数偏差,我需要使用两者中的哪一个?也就是说,iPhone 上的数字罗盘将根据设备面向的位置(例如 90、180、193 等)显示的值

我知道以上都没有以整数格式返回度数。文档不清楚它们到底返回了什么.. 我认为是 MicroTeslas ..

但是,如果他们确实返回了一个 MicroTesla 值,我该如何将此值转换为表示度数的整数?我是否必须将该 MicroTesla 值乘以某个常数或类似性质的东西?

谢谢你的帮助!

4

2 回答 2

4

作为旁注,如果您想获得当前位置的磁偏角,您可以简单地从真实航向中减去磁航向。该数字对于将磁罗盘方位转换为真北方位很有用。

CLLocationDirection magneticDeclination = newHeading.trueHeading - newHeading.magneticHeading;
于 2012-09-08T13:40:08.603 回答
1

您需要测量heading您从中获得的设备CLLocationManager。以下是您开始获取标题更新的方式(首先导入核心位置框架)-

if([CLLocationManager headingAvailable]) //check if device has magnetometer
    [locationManager startUpdatingHeading];

在此之后,您将在此代表中获得更新-

- (void)locationManager:(CLLocationManager*)manager 
       didUpdateHeading:(CLHeading*)newHeading
{
    // If the accuracy is valid, process the event.
    if (newHeading.headingAccuracy > 0)
        CLLocationDirection theHeading = newHeading.magneticHeading;

    return;
}

soCLLocationDirection表示相对于真北以度为单位测量的方向。

方向值以度为单位测量,从正北开始,并围绕罗盘顺时针继续。因此,北为 0 度,东为 90 度,南为 180 度,依此类推。负值表示方向无效。

希望他的帮助...

更新:请查看这些链接 - CLLocationManager 和 iPhone和iPhone 3.0中的航向度指南针:如何获取航向?苹果参考

于 2012-07-06T14:57:23.860 回答