从苹果的文档:

@property(readonly, nonatomic) CMMagneticField magneticField

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

此属性的值是设备观测到的总磁场,等于地球的地磁场加上从设备本身及其周围环境引入的偏置。
@property(readonly, nonatomic) CMCalibratedMagneticField magneticField

此属性返回的CMCalibratedMagneticField可为您提供设备附近的总磁场,而无需设备偏置。与CMMagnetometer类的magneticField属性不同,这些值反映的是地球磁场加周围磁场(减去设备偏置)。

如果要获取设备与北方之间的偏差(度数),我需要使用哪两个?也就是说,iPhone上的数字罗盘根据设备所面对的位置(例如90、180、193等)显示的值。

我知道上述所有返回度都不是整数格式。关于它们到底返回什么,文档尚不清楚。我认为是MicroTeslas。

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

谢谢你的帮助!

最佳答案

您需要测量从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;
}

因此CLLocationDirection表示相对于真实北方的度数。

方向值以度数为单位,从正北开始,然后沿指南针顺时针方向继续。因此,北是0度,东是90度,南是180度,依此类推。负值表示方向无效。

跳下他的帮助...

更新:会检查这些链接-CLLocationManager and degrees of heading in iPhoneiPhone 3.0 Compass: how to get a heading?apple reference

10-06 06:08