我想让设备偏离磁北的度数,并在我写的一些代码中使用该值。
我不想使用该设备的位置服务,因此我对获得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;
如何获得学位?或者是否还有其他方法(类/属性/方法)来获取磁力计的度数?
提前感谢任何有关此事的有用信息的人! :)
答案 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)
您需要融合传感器以模仿苹果应用程序。他们使用陀螺仪加速度计和磁力计,以及您可能学习或未学过的高级数学,以产生如此干净的结果。祝好运。你可能无法模仿他们。