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

8 objective-c magnetometer heading ios

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

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

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

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

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

@property(readonly, nonatomic) CMMagneticField magneticField

A structure containing 3-axis magnetometer data

typedef struct {
   double x;
   double y;
   double z;
} CMMagneticField;
Run Code Online (Sandbox Code Playgroud)

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

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

kad*_*dam 12

所述的iOS文档指出CMMagneticField数据是原始的,意味着它包括从所述装置本身和它的周围引入偏倚.CMDeviceMotion提供相同的磁场值过滤.

要确定磁北,您应该使用滤波值,设备应与地球表面平齐.

知道了磁场的x和y值,可以用下面的公式计算角度(磁北偏角度).

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
Run Code Online (Sandbox Code Playgroud)

在Obj-C中,假设你有一个CMMagnetometerData被调用的对象magnetometerData,它看起来像:

 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;
Run Code Online (Sandbox Code Playgroud)

  • 为了获得磁北,无论您如何握住设备,我想您应该使用 CMDeviceMotion 的已过滤磁值,而不是 CMMagnetometerData 的未过滤值。 (2认同)