緯度と経度の値を持つ2つの列を取得しました。すべての行のポイント間の距離を計算する必要があります。 haversine 式を使用しようとしています ここ :
それがいわゆる「大圏」の計算です。膨大な量の座標でこの計算を実行する必要があります。
データは次のようになります。
| A B C D E F G
--|-------------------------------------------
0 | LAT LON rLAT dLAT dLON a DIST
1 | 52.39964 13.04729 ... ... ... ...
2 | 52.39985 13.04802 ... ... ... ... ???
3 | 52.40116 13.04744 ... ... ... ... ???
4 | 52.40147 13.04722 ... ... ... ... ???
5 | 52.40163 13.04685 ... ... ... ... ???
6 | ... ... ... ... ... ... ...
さて、私が試したのは、LibreOfficeのフィールドG2
に対して次のとおりです。
C2=RADIANS(A2)
D2=RADIANS(A2-A1)
E2=RADIANS(B2-B1)
F2=SIN(D2/2)*SIN(D2/2)+SIN(E2/2)*SIN(E2/2)*COS(C1)*COS(C2)
G2=2*ATAN2(SQRT(F2), SQRT(1-F2))*6371
G2
is20015
の結果はかなり...間違っています。
MicrosoftExcelまたはLibreOfficeCalcで緯度と経度で指定された2点間の距離を計算するにはどうすればよいですか?私の式の何が問題になっていますか?
here by BrianAdkins であるように、2つの緯度/経度ポイント間の距離を計算するこのExcelの数式は、LibreOfficeCalcとMicrosoftExcel2013の両方で機能します。
=ACOS(COS(RADIANS(90-A1))*COS(RADIANS(90-A2))+SIN(RADIANS(90-A1))*SIN(RADIANS(90-A2))*COS(RADIANS(B1-B2)))*6371
結果はキロメートル単位です。距離が短い場合は、*1000
を使用して距離をメートル単位で表示しました。
| A B C
--|--------------------------
0 | LAT LON DIST
1 | 52.39964 13.04729
2 | 52.39985 13.04802 54.8
3 | 52.40116 13.04744 150.9
4 | 52.40147 13.04722 37.6
5 | 52.40163 13.04685 30.8
6 | ... ... ...
距離をマイルで表示するには、*6371
を*3958
に置き換えます。
半正矢関数の方法は、エラーファクターを受け入れる意思がある場合、またはワークシートの数式のみを使用して実装する必要がある場合に適しています。短距離で重大でない状況では、おそらく問題ありません。ただし、精度が必要な場合は、サディアス・ヴィンセンティが開発したアルゴリズムのようなものを使用する必要があります。その結果は、使用されるlat/longペアの精度に基づいて、ミリメートルまで正確であると見なされます。 2つの違いはどれくらいですか? JFKと東京の間では、約14.9法定マイル(短い)の差があります。ロサンゼルスとホノルルの間では、島からわずか約5kmの距離にあります。
Visual Basic(Excelの場合)でのVincentyアルゴリズムの適切な実装は、次の場所にあります。 http://lost-species.livejournal.com/38453.html コードはそのまま実行されます。 '32ビットバージョンのExcelでは、64ビットバージョンのExcelでは '式が複雑すぎる'エラーで失敗します。コード全体の投稿のすぐ下に、VBAエンジンの32ビットバージョンと64ビットバージョンの両方で実行できるようにする問題の修正を投稿しました。
よろしく、J.Latham、Microsoft MVP、Excel 2006-2014
完全な直接/逆Vincenty式ExcelVBA実装(32/64ビットアドイン)により、距離の計算だけでなく、方位角と逆方位角も可能になります https://github.com/tdjastrzebski/VincentyExcel