Objective c 如何从iOS中的磁场属性中获取度?

Objective c 如何从iOS中的磁场属性中获取度?,objective-c,ios,class,magnetometer,degrees,Objective C,Ios,Class,Magnetometer,Degrees,从苹果的文档中: @property(readonly, nonatomic) CMMagneticField magneticField 返回由磁强计测量的磁场。只读 该属性的值是设备观测到的总磁场,等于地球地磁场加上设备本身及其周围引入的偏置 此属性返回的CMCalibratedMagneticField为您提供设备附近的总磁场,而无设备偏置。与CMM磁强计类别的磁场属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏置 如果我想获得设备与北方的偏差(以度为单位),我需要使用这两种方法中

从苹果的文档中:

@property(readonly, nonatomic) CMMagneticField magneticField
返回由磁强计测量的磁场。只读

该属性的值是设备观测到的总磁场,等于地球地磁场加上设备本身及其周围引入的偏置

此属性返回的CMCalibratedMagneticField为您提供设备附近的总磁场,而无设备偏置。与CMM磁强计类别的磁场属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏置

如果我想获得设备与北方的偏差(以度为单位),我需要使用这两种方法中的哪一种?也就是说,iPhone上的数字指南针显示的值取决于设备面对的位置,例如90、180、193等

我知道上面没有一个返回整数格式的度数。文件中不清楚他们究竟返回了什么。。我想是微特斯拉

但是如果他们返回一个微特斯拉值,我怎么把这个值转换成一个表示度的整数呢?我必须用常数或类似的东西乘以微特斯拉值吗


谢谢你的帮助

您需要测量从CLLocationManager获得的设备标题。下面是如何开始获取标题更新first import core Location framework-

if([CLLocationManager headingAvailable]) //check if device has magnetometer
    [locationManager startUpdatingHeading];
在此之后,您将在此委托中获得更新-

- (void)locationManager:(CLLocationManager*)manager 
       didUpdateHeading:(CLHeading*)newHeading
{
    // If the accuracy is valid, process the event.
    if (newHeading.headingAccuracy > 0)
        CLLocationDirection theHeading = newHeading.magneticHeading;

    return;
}
所以CLLocationDirection代表了一个相对于正北方向以度为单位测量的方向

方向值以度为单位测量,从正北开始,沿指南针顺时针方向继续。因此,北方是0度,东方是90度,南方是180度,依此类推。负值表示方向无效

希望他的帮助


更新:请查看这些链接,并且。

您需要测量从CLLocationManager获得的设备标题。下面是如何开始获取标题更新first import core Location framework-

if([CLLocationManager headingAvailable]) //check if device has magnetometer
    [locationManager startUpdatingHeading];
在此之后,您将在此委托中获得更新-

- (void)locationManager:(CLLocationManager*)manager 
       didUpdateHeading:(CLHeading*)newHeading
{
    // If the accuracy is valid, process the event.
    if (newHeading.headingAccuracy > 0)
        CLLocationDirection theHeading = newHeading.magneticHeading;

    return;
}
所以CLLocationDirection代表了一个相对于正北方向以度为单位测量的方向

方向值以度为单位测量,从正北开始,沿指南针顺时针方向继续。因此,北方是0度,东方是90度,南方是180度,依此类推。负值表示方向无效

希望他的帮助


更新:请查看这些链接-和。

作为旁注,如果您想获得当前位置的磁偏角,只需从真实航向中减去磁偏角即可。该数字可用于将磁罗盘方位转换为正北方位

CLLocationDirection magneticDeclination = newHeading.trueHeading - newHeading.magneticHeading;

作为旁注,如果你想得到你当前位置的磁偏角,你可以简单地从真实航向中减去磁航向。该数字可用于将磁罗盘方位转换为正北方位

CLLocationDirection magneticDeclination = newHeading.trueHeading - newHeading.magneticHeading;

磁场数据包含x、y和z分量。您可能需要执行必要的触发操作才能将其转换为标题。当然,请记住,地球的磁场并不完美,因此,特别是在两极附近,你需要进行校正以获得真正的航向。磁场数据包含x、y和z分量。您可能需要执行必要的触发操作才能将其转换为标题。当然,请记住,地球的磁场并不完美,因此,特别是在两极附近,你需要进行校正以获得真正的航向。只是一个简单但可能愚蠢的问题:CLLocation Manager是否使用GPS或磁强计,因为我只想依赖设备的磁强计。。谢谢:因为x,y,z是根据地磁数据测量的,所以我猜航向也是基于这个。但是既然你有兴趣知道设备相对于北方的航向,为什么这对你来说很重要呢?因为如果它依赖GPS,而GPS不可用,我就什么也得不到,而设备的磁强计总是可用的。。但是你是对的,使用GPS进行这样的读取是没有意义的..>>如果我理解正确,上面的意思是,启用GPS是这项工作所必需的,而我只想使用磁强计,绕过询问原告是否希望启用定位服务、消耗电池、,等等因此,我不认为CLLocation Manager是我问题的答案:如果有人感兴趣,这个问题最终在这里得到了回答:只是一个简单但愚蠢的问题:CLLocation Manager是否使用GPS或磁强计,因为我只想依赖设备的磁强计。。谢谢:因为x,y,z是根据地磁数据测量的,所以我猜航向也是基于这个。但是既然你想知道设备的头部
为什么这对你来说很重要?因为如果它依赖GPS,而GPS不可用,我就什么也得不到,而设备的磁强计总是可用的。。但是你是对的,使用GPS进行这样的读取是没有意义的..>>如果我理解正确,上面的意思是,启用GPS是这项工作所必需的,而我只想使用磁强计,绕过询问原告是否希望启用定位服务、消耗电池、,等等所以我不认为CLLocation Manager是我问题的答案:如果有人感兴趣,这个问题最终在这里得到了回答: