来自Apple的文档:
@property(readonly, nonatomic) CMMagneticField magneticField
返回磁力计测量的磁场。 (只读)
此属性的值是设备观察到的总磁场,它等于地球的地磁场加上从设备本身及其周围环境引入的偏差。
@property(readonly, nonatomic) CMCalibratedMagneticField magneticField
此属性返回的CMCalibratedMagneticField可为您提供设备附近的总磁场,而不会出现设备偏差。与CMMagnetometer类的magneticField属性不同,这些值反映了地球的磁场加上周围的场,减去了设备偏差。
如果我想让设备偏离北方度数,我需要使用哪两个?也就是说,iPhone上的数字罗盘的值将根据设备面向的位置显示(例如90,180,193等)。
我知道以上都没有以整数格式返回度数。文档不清楚它们究竟返回了什么..我认为它是MicroTeslas ..
但如果他们做返回MicroTesla值,我如何将此值转换为表示度数的整数?我是否必须将MicroTesla值乘以某种常数或某种性质?
感谢您的帮助!
答案 0 :(得分:4)
作为旁注,如果您想获得当前位置的磁偏角,您可以简单地从真实航向中减去磁航向。该数字对于将磁罗盘轴承转换为真北轴承非常有用。
CLLocationDirection magneticDeclination = newHeading.trueHeading - newHeading.magneticHeading;
答案 1 :(得分:1)
您需要衡量从heading
获得的设备CLLocationManager
。下面是你如何开始获得标题更新(首先导入核心位置框架) -
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 and degrees of heading in iPhone和iPhone 3.0 Compass: how to get a heading?以及apple reference。