【发布时间】:2013-11-28 08:11:36
【问题描述】:
我想知道是否有办法使用CLHeading 或CLLocationDirection 在真实方位角和磁方位角之间转换用户输入的值。
在具有大量 SO 示例的正常情况下,我们可以使用 didUpdateHeading:(CLocation) newHeading 和 newHeading.magneticHeading 或 trueHeading 在我们想要设备方位/航向时获取这些值。 trueHeading 和 magneticHeading 都是只读属性。
但是,我需要为用户提供输入到CLocation 或其他东西的真实方位角,并返回与输入相对应的磁值。
一种方法是从 NOAA(或其他来源)获取更新的地球磁场模型,并编写代码以根据用户位置进行此计算。然而,这有很多缺点,并且需要不断更新应用程序代码中的模型数组,因为模型一直在变化。使用任何内置模型都会很棒......
更新(了解偏角的更多信息):
我测试了 DC 区域的偏角,它正确返回了 -10.7 度,@rokjarc 回答中的简单函数如下所示。有关美国偏角的参考,请参阅以下地图(图片来源 - NOAA):
稍后我将在德克萨斯州休斯顿地区的朋友的设备上部署它,该地区的磁偏角为 2 度以进一步确认。
如果您想知道,当您使用 Apple 的 MapKit 时,地图始终是定向的,因此真正的北方位于地图的顶部 -- 来源 -- (http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapView_Class/) 有了上述信息,如果显示一个 POI 的方位角或方位角相对于我想要达到的位置,您应该始终使用真实的航向而不是磁性的……
注意:磁偏角一直在变化(您可能听说过极移)。例如,如果您在 2016 年对此进行测试,DC 的偏角可能为 -5 或 -20 等,而不是当前的 -10。当使用这种方法计算磁偏角时,您不必担心磁偏角随时间的变化,因为指南针(我相信)会感应到地球的磁场并返回正确的heading.magneticHeading
【问题讨论】:
标签: ios compass-geolocation heading