问题描述
当从iOS上的磁力计获取北磁场矢量时,我知道有三种方法可以做到这一点。只有第一种方法似乎可以给出合理的结果。根据Compass应用程序,手机的背面平坦,长轴指向97° E
。
这似乎很合理!
-
(-18.4,-15.3 -44.9)
cmmotionmanager
。这为startMagnetometerUpdates
提供了CMMagneticField
的{{1}}向量。需要清楚的是,Z轴值为负三百七十五微特斯拉。这似乎不合理。如果我旋转手机,则(x,z)
的值会波动,但不会低于(36.5,-10.1,-375)
,这就是手机从上面提供结果的位置反转的时候。
这是尚未被过滤掉的内部磁场吗?
-
z
-283
。这为cmmotionmanager
提供了属性startDeviceMotionUpdates
和CMCalibratedMagneticField
的{{1}}向量。尽管事件正在迅速且一致地触发,但这似乎没有返回有意义的数据。
为什么它不返回任何值?
解决方法
您似乎对CMMagneticField
正确,Apple docs指定其中包括“从设备本身及其周围环境引入的偏见。”
据我所知,当CMMotionManager
返回向量(0.0,0.0,0.0)
时,它不是properly calibrated。您可以检查精度值以确保这一点。在此StackOverflow answer中可以找到有关校准设备的有用指南。
注意:CMMotionManager
返回的磁场与磁力计返回的CMMagneticField
不同,因此不包括来自设备的偏置。请参见var magneticField: CMCalibratedMagneticField
字段within the docs。