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)
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |