CLLocation - 在另一个位置找到磁偏角/偏差

时间:2012-06-05 09:08:45

标签: iphone objective-c ios cllocation

我知道如何找到手机当前位置的真实航向/磁航向,但是有可能找到远程位置的磁偏差/磁偏角吗?

我想做的是能够将一个销钉放在地图上的某个位置,并从该点找到具有磁性变化的真实轴承和轴承。

谢谢!

3 个答案:

答案 0 :(得分:4)

你解决了吗?否则,您可以计算远程位置的方位角。首先是磁北向,然后是真北向。最后你减去两个以获得磁偏差。

以下是如何计算远程位置的方位角:

-(float)azimuthFromLocations:(CLLocationCoordinate2D)first toCoordinate:(CLLocationCoordinate2D)second{
float longitudeDifference = second.longitude - first.longitude;
float latitudeDifference = second.latitude  - first.latitude;
float possibleAzimuth = (M_PI * .5f) - atan(latitudeDifference / longitudeDifference);

if (longitudeDifference > 0)
    return possibleAzimuth;
else if (longitudeDifference < 0)
    return possibleAzimuth + M_PI;
else if (latitudeDifference < 0)
    return M_PI;

return 0.0f;
}

答案 1 :(得分:4)

计算此代码的代码必须已存在于某个框架中,因为当位置服务可用时,CLHeading会使用它。

如果有人能够找到该代码或者有针对世界磁性模型发布的目标C,那么我们将不胜感激。

更新:我发现了一个很棒的开源iOS包装器!谢谢Crookneck! https://github.com/stephent/ObjectiveWMM

作为git子模块进行简单安装

run this command:
$git submodule add https://github.com/stephent/ObjectiveWMM.git ObjectiveWMM

Add these files to your Xcode project:
CCMagneticDeclination.h
CCMagneticDeclination.m
CCMagneticModel.h
CCMagneticModel.m
NSDate+DecimalYear.h
NSDate+DecimalYear.m
WMM/EGM9615.h
WMM/GeomagnetismHeader.h
WMM/GeomagnetismLibrary.c
WMM/WMM.COF

答案 2 :(得分:0)

基于World Magnetic Model,我在Swift中需要相同的解决方案。

这是我的实施: https://github.com/kanchudeep/Geomagnetism-Swift

它是一个简单的单个类,可以放入任何项目中使用。