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

时间:2012-07-08 14:40:36

标签: objective-c ios magnetometer heading

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

我不想使用该设备的位置服务,因此我对获得True north而不是Magnetic North(仅使用设备的磁力计)感兴趣。

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

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;

如何获得学位?或者是否还有其他方法(类/属性/方法)来获取磁力计的度数?

提前感谢任何有关此事的有用信息的人! :)

2 个答案:

答案 0 :(得分:12)

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

要确定磁北,您应该使用滤波值,设备应与地球表面保持水平。

知道磁场的x和y值,可以使用以下formula计算角度(以磁北为单位的偏角):

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中,假设你有一个名为CMMagnetometerData的{​​{1}}对象,它看起来像是:

magnetometerData

答案 1 :(得分:-2)

您需要融合传感器以模仿苹果应用程序。他们使用陀螺仪加速度计和磁力计,以及您可能学习或未学过的高级数学,以产生如此干净的结果。祝好运。你可能无法模仿他们。