如何从iOS中的磁场属性中获得学位?

时间:2012-07-06 14:53:16

标签: objective-c ios class magnetometer degrees

来自Apple的文档:

@property(readonly, nonatomic) CMMagneticField magneticField

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

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

@property(readonly, nonatomic) CMCalibratedMagneticField magneticField

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

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

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

但如果他们返回MicroTesla值,我如何将此值转换为表示度数的整数?我是否必须将MicroTesla值乘以某种常数或某种性质?

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

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

CLLocationDirection magneticDeclination = newHeading.trueHeading - newHeading.magneticHeading;

答案 1 :(得分: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;
}

所以CLLocationDirection表示以相对于真北的度数来衡量的方向。

方向值以正北方向开始测量,并沿指南针顺时针方向继续。因此,北是0度,东是90度,南是180度,依此类推。负值表示无效方向。

采取他的帮助......

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