【问题标题】:Finding user's bearing from current location in 2D plane iOS在 2D 平面 iOS 中从当前位置查找用户的方位
【发布时间】:2021-06-29 07:32:41
【问题描述】:

我正在尝试从我的 iOS 应用中的当前位置访问用户的方位。

我正在使用下面的代码来访问它

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    heading = newHeading.trueHeading > 0 ? newHeading.trueHeading : newHeading.magneticHeading
}

但是,如果我们在 2D 平面中查看,则它没有用,其中度数的范围是顺时针方向的 0 到 360。我想通过套接字将方位数据发送给不同的订户用户,其中可以在 iOS 和 Android 上显示地图上带有航向指示器的注释(就像带有航向的当前位置指示器)。我正在使用一个自定义图像,该图像具有指向上方(12 点钟)的航向指示器以在我的其他应用程序上显示。

Android 有轴承,这是我正在寻找的那种价值。

我怎样才能得到那个值?

谢谢

【问题讨论】:

    标签: ios swift objective-c core-location


    【解决方案1】:

    航向是由磁力计决定的,确实不能用。这是一个静态值。

    通过比较后续 (GPS) 位置来确定方位。这是一个随时间变化的动态值。

    iOS 提供轴承,但将其命名为“课程”:locationManager(_:didUpdateLocations:)

    你必须阅读CLLocationcourse property

    因为只有在移动设备移动时才能确定航向,所以航向精度取决于速度和 GPS 精度。因此,您必须使用 courseAccuracy 来确定如何/是否将其显示在 UI 上。

    【讨论】:

    • 我猜您的选择是尝试使用 2 个位置来确定,即以前的位置和当前位置。如果我可以直接从用户的当前位置获取它,那是我不想做的事情。如果 Android 可以直接提供它,我相信 iOS 也可以做到,我只是想不出一个简单的方法。
    • @ParasGorasiya 我研究 iOS 定位 API 已经有一段时间了。看来iOS现在确实提供了轴承。请参阅我的更新答案。
    • 感谢您更新答案。我之前尝试过,但我不知道为什么这个值大多是-1。它偶尔会更新为某个正数,但随后又回到 -1。不知道我的代码有什么问题。
    • @ParasGorasiya 我链接的文档说:“负值表示课程信息无效。”。如果您在家/办公室并且您的 iOS 没有移动,当然 iOS 无法确定 course。所以这里没有错;你也必须处理这种情况。编写处理诸如位置等现实世界参数的逻辑并不容易。您需要考虑、处理和正确(重新)呈现在 UI 中的许多事情和状态。检查模拟器是否允许设置模拟的course,就像设置位置一样。
    • @ParasGorasiya 我很高兴能为您提供帮助。请确保您测试的是 负值 而不仅仅是 -1,因为这是在Apple 的文档。
    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多