gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:08:38 25 4
gpt4 key购买 nike

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

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com