我想知道是否有一种方法可以为用户输入的值使用CLHeading
或在真方位角和磁方位角之间进行转换。CLLocationDirection
在有大量关于 SO 示例的正常情况下,当我们需要设备方位/航向时,我们可以使用didUpdateHeading:(CLocation) newHeading
withnewHeading.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