基本上我想知道 iPhone 高精度指向的方向,我尝试了 CLLocationManager:问题是 CLHeading.magneticHeading 返回双精度,例如 36.44323 但是当我开始转动设备时,CLLocationManager 仅在达到 1 度时更新方向,所以数字读起来像这样:36.44323、37.44323、38.44323 等等。是否有可能获得更高的准确性?
4 回答
设置CLLocationManager
headingFilter
为kCLHeadingFilterNone
或小于默认 1 度。
如果您不关心准确性但对方向的微小变化感兴趣,那么您可能需要查看CMMotionManager
. 它是一个属性 ( deviceMotion
),它允许您获取attitude
设备的 ,尤其是yaw
. 通过记录x
每次航向更新的偏航和磁航向之间的差异(例如),您可以获得更新之间的近似航向yaw + x
。您将收到更及时的更新,CMMotionManager
因为您可以deviceMotionUpdateInterval
自己设置。
如果我没记错的话,该yaw
值以 -pi 和 pi 之间的弧度返回,因此在计算时您需要转换回度数,x
因为CLLocationManager
返回的磁航向是度数(0 到 360)。
您可能还想对设备方向进行调整。指南针从设备顶部返回航向数据,因此如果您在 LandscapeLeft 中,您需要从航向值中减去 90°, LandscapeRight 您需要在航向值上添加 90°,并且 PortraitUpsideDown 需要调整 180° .
不是我知道的,不。
并且不要将准确性与正确性混为一谈;仅仅因为它说 36.44323 并不意味着它精确到小数点后 5 位,该值的误差范围可能是 ±1 度:(
我不认为 iPhone 上的指南针具有足够高的精度,无法真正自信地说出你所指向的方向是你想要的精度。对不起!
如果您需要更高的精度,您应该使用陀螺仪。CoreMotion 的设备运动数据应该可以帮助您。指南针确实不够准确。