【问题标题】:Is it possible to acquire less than a degree accuracy in iOS compass heading?是否有可能在 iOS 罗盘航向中获得低于度数的精度?
【发布时间】:2012-04-12 14:07:42
【问题描述】:

基本上我想知道 iPhone 高精度指向的方向,我尝试了 CLLocationManager:问题是 CLHeading.magneticHeading 返回一个双精度值,例如 36.44323 但是当我开始转动设备时,CLLocationManager 只更新方向达到 1 度,因此数字如下所示:36.44323、37.44323、38.44323 等等。是否有可能获得更高的准确性?

【问题讨论】:

  • 您是否将CLLocationManager 上的desiredAccuracy 设置为kCLLocationAccuracyBestForNavigation?这将不仅仅利用磁力计(例如陀螺仪)。也许这会让您获得更高的准确性?
  • 是的,但结果是一样的,我也做了这些,但没有运气:1-将 headingFilter 设置为小于 1 并将其设置为 kCLHeadingFilterNone ,2-创建一个单独的线程在更新和 3- 之间手动读取 CLLocationManager 数据以在 didUpdateHeading 方法结束时调用 stopUpdatingHeading 并使用单独的线程再次打开它,但结果不可靠,因为结果需要一段时间才能稳定。

标签: ios compass-geolocation magnetometer heading


【解决方案1】:

CLLocationManager headingFilter 设置为 kCLHeadingFilterNone 或小于默认 1 度的任何值。

【讨论】:

  • 这不会提高精度,只会更频繁地更新
【解决方案2】:

如果您不关心准确性但对方向的微小变化感兴趣,那么您可能需要查看CMMotionManager。这是一个属性 (deviceMotion),它允许您获取设备的 attitude,尤其是 yaw。通过记录每次航向更新的偏航和磁航向之间的差异(比如x),您可以获得更新之间的近似航向yaw + x。您将收到来自CMMotionManager 的及时更新,因为您可以自己设置deviceMotionUpdateInterval

如果我没记错的话,yaw 值以弧度在 -pi 和 pi 之间返回,因此在计算 x 时需要转换回度数,因为CLLocationManager 将返回磁航向度数(0 到 360 )。

您可能还需要调整设备方向。指南针从设备顶部返回航向数据,因此如果您在 LandscapeLeft 中,您需要从航向值中减去 90°, LandscapeRight 您需要在航向值上添加 90°,并且 PortraitUpsideDown 需要调整 180° .

【讨论】:

    【解决方案3】:

    我不知道,没有。​​

    不要将准确性与正确性混为一谈;仅仅因为它说 36.44323 并不意味着它精确到小数点后 5 位,该值的误差范围可能是 ±1 度 :(

    我不认为 iPhone 上的指南针具有足够高的精度,无法真正自信地说出您所指的方向是您想要的精度。对不起!

    【讨论】:

    • 我不关心数字的正确性,而是我对设备方向的微小变化感兴趣,应该有一个原因,结果数字是双倍而不是整数,
    【解决方案4】:

    如果您需要更高的精度,您应该使用陀螺仪。 CoreMotion 的设备运动数据应该可以帮助您。指南针确实不够准确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2016-01-03
      • 1970-01-01
      • 2016-03-05
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多