自分の電話が現在ある場所の真の方位/磁気方位を見つける方法を知っていますが、離れた場所の磁気偏差/偏角を見つけることは可能ですか?
私がやりたいのは、地図上のある場所にピンを落とし、真の方位とその点からの磁気偏角のある方位の両方を見つけることができるようにすることです。
ありがとう!
自分の電話が現在ある場所の真の方位/磁気方位を見つける方法を知っていますが、離れた場所の磁気偏差/偏角を見つけることは可能ですか?
私がやりたいのは、地図上のある場所にピンを落とし、真の方位とその点からの磁気偏角のある方位の両方を見つけることができるようにすることです。
ありがとう!
これを計算するコードは、位置情報サービスが利用可能なときにCLHeadingによって使用されるため、フレームワークのどこかにすでに存在している必要があります。
誰かがそのコードを見つけることができるか、世界の磁気モデルの投稿のためのObjective 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つを引いて、自差を求めます。
遠隔地の方位角を計算する方法は次のとおりです。
-(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;
}
World Magnetic Modelに基づいて、Swiftでも同じソリューションが必要でした。
これが私の実装です: https ://github.com/kanchudeep/Geomagnetism-Swift
これは、任意のプロジェクトにドロップして使用できる単純な単一のクラスです。