我想获取设备与磁北的偏差(以度为单位),并在我正在编写的一些代码中使用该值。
我不想使用设备的定位服务,因此我对获取真北不感兴趣,而是对磁北感兴趣(仅使用设备的磁力计)。
哪个类(或编码过程..)可以为我提供该值(仅依赖于磁力计)?
CLLocationManager 类及其属性依赖于位置服务的启用/可用
Core Motion 框架及其 CMagnetometerData 类为我们提供了以下属性:
@property(readonly, nonatomic) CMMagneticField magneticField
A structure containing 3-axis magnetometer data
typedef struct {
double x;
double y;
double z;
} CMMagneticField;
我如何从中获得学位?或者是否有其他方法(类/属性/方法)仅从磁力计中获取度数?
预先感谢任何提供有关此事有用信息的人! :)
The iOS 文档指出 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
称为的对象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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)