地球上の2つの座標点間の距離を計算するための長い数式を次に示します。
= ACOS(COS(RADIANS(90-LAT1))* COS(RADIANS(90-LAT2))+ SIN(RADIANS(90-LAT1))* SIN(RADIANS(90-LAT2))* COS(RADIANS(Long1-Long2 )))* 6371
他の数式内で使用するのは少し面倒なので、そのためのユーザー定義関数を作成しました。
関数DistXY(Lat1としてシングル、Lng1としてシングル、Lat2としてシングル、Lng2としてシングル)シングルとして
DistXY = WorksheetFunction.Acos(Cos(WorksheetFunction.Radians(90-Lat1))* Cos(WorksheetFunction.Radians(90-Lat2))+ Sin(WorksheetFunction.Radians(90-Lat1))* Sin(WorksheetFunction.Radians(90- Lat2))* Cos(WorksheetFunction.Radians(Lng1-Lng2)))* 6371
終了機能
ご覧のとおり、それらはまったく同じです。VBAにはAcos ou Radians関数がないため、「worksheetFunction」メソッドも使用します。
これらの式を同じXY座標のペアに適用すると、異なる結果が得られるのはなぜですか?
例えば:
ABC 45.4960674、-73.514446からXYZ 43.5369、-71.8592へ
DistXY()の結果:254.313156128
ロングフォーミュラ法:254.313268914
@raystafarianのコメントと合わせて、すべてのタイプをdoubleに変更すると、精度が向上しました。しかし、まだ違いがあります。
関数DistXY(Lat1としてdouble、Lng1としてdouble、Lat2としてdouble、Lng2としてdouble)doubleとして...
新しい結果:
DistXY():254.313268913 5060 km
ロングフォーミュラ法:254.313268913 5250 km