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

标签 objective-c ios magnetometer heading

我想获取设备与磁北的偏差度数,并在我编写的某些代码中使用该值。

我不想使用设备的定位服务,因此我对获取真北不感兴趣,而是对磁北(仅使用设备的磁力计)感兴趣。

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

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;

我如何获得学位?还是有其他方法(类/属性/方法)可以单独从磁力计中获取度数?

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

最佳答案

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 中,假设您有一个名为 magnetometerDataCMMagnetometerData 对象,它看起来像这样:

 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;

关于objective-c - 哪个 iOS 类/代码返回磁北?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383968/

相关文章:

objective-c - 我应该在哪里设置 ViewController 中的 subview 框架

ios - libc++abi.dylib : terminating with uncaught exception of type NSException (lldb) : Drop Down Menu

android - 如何使用此传感器 API 中的磁力计?

Android 磁力计返回随机值

java - 使用磁力计的简单 compass - Android (Java)

ios - x86_64 的条纹支付库和 undefined symbol

ios - 计算某一层上某个类的 CCNodes 的数量

ios - 第一次发送后发送 'CBPeripheralManager' 的多个 NSData 实例失败

ios - 如何在 Objective-C 中测试代理对象上的选择器?

ios - 几周后 Firebase 推送通知不起作用