从苹果的文档:
@property(readonly, nonatomic) CMMagneticField magneticField
返回由磁力计测量的磁场。 (只读)
此属性的值是设备观测到的总磁场,等于地球的地磁场加上从设备本身及其周围环境引入的偏置。
@property(readonly, nonatomic) CMCalibratedMagneticField magneticField
此属性返回的CMCalibratedMagneticField可为您提供设备附近的总磁场,而无需设备偏置。与CMMagnetometer类的magneticField属性不同,这些值反映的是地球磁场加周围磁场(减去设备偏置)。
如果要获取设备与北方之间的偏差(度数),我需要使用哪两个?也就是说,iPhone上的数字罗盘根据设备所面对的位置(例如90、180、193等)显示的值。
我知道上述所有返回度都不是整数格式。关于它们到底返回什么,文档尚不清楚。我认为是MicroTeslas。
但是,如果它们确实返回MicroTesla值,如何将其转换为表示度的整数?我是否必须将该MicroTesla值乘以某个常数或类似性质?
谢谢你的帮助!
最佳答案
您需要测量从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。