哪个iOS类/代码返回磁北?

我想让设备偏离磁北度,并在我正在写的一些代码中使用这个值。

我不想使用该设备的位置服务,因此我不感兴趣获得真正的北方,而是磁北(只使用设备的磁力计)。

哪个类(或编码过程)可以为我提供这个值(仅依靠磁力计)?

CLLocationManager类及其属性依赖于定位服务被启用/可用

其中,CMMagnetometerData类的Core Motion框架为我们提供了以下属性:

@property(readonly, nonatomic) CMMagneticField magneticField A structure containing 3-axis magnetometer data typedef struct { double x; double y; double z; } CMMagneticField; 

我如何获得学位? 还是有其他的方法(类/属性/方法)来获取磁力仪的度数呢?

提前感谢任何人有关于这个问题的一些有用的信息! 🙂

iOS文档指出,CMMagneticField数据是原始数据,这意味着它包含从设备本身及其周围引入的偏差。 CMDeviceMotion提供相同的磁场值过滤。

要确定磁北,你应该使用过滤的值,设备应该与地球表面平齐。

知道磁场的x和y值,可以用下面的公式计算angular度(从磁北向的angular度,以度为单位):

 if (y>0): heading = 90.0 - [arcTan(x/y)]*180/π if (y<0): heading = 270.0 - [arcTAN(x/y)]*180/π if (y=0, x<0): heading = 180.0 if (y=0, x>0): heading = 0.0 

在Obj-C中,假设你有一个名为magnetometerDataCMMagnetometerData对象,它看起来像这样:

  double heading = 0.0; double x = magnetometerData.magneticField.x; double y = magnetometerData.magneticField.y; double z = magnetometerData.magneticField.z; if (y > 0) heading = 90.0 - atan(x/y)*180.0/M_PI; if (y < 0) heading = 270.0 - atan(x/y)*180.0/M_PI; if (y == 0 && x < 0) heading = 180.0; if (y == 0 && x > 0) heading = 0.0; 

您需要融合传感器来模仿苹果应用程序。 他们使用陀螺仪加速度计和磁力计,以及您可能已经或可能没有学会产生如此清晰结果的高级math。 祝你好运。 你可能无法模仿他们。