それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

地球上の2地点間の距離を計算する方法

問題

地球上の2地点それぞれの緯度と経度が与えられます。その地点間の距離を計算してください。
* ただし地球は球体と仮定し、半径は6378kmとします。

用語

  • 緯度
    • 基準は赤道。北極点を北緯90度、南極点を南緯90度とする
  • 経度
  • 大円
    • 球の中心を通るように球を切った時の切り口
  • 大円距離
    • 球面上の距離計測対象の2地点を結ぶ大円の弧の長さ

解法

円弧の長さ Lは、半径 rと中心角 \theta \quad (0 \le \theta \le 2\pi)を用いて、

 \displaystyle
L = r \theta

で求められる。
また、2地点の緯度経度をそれぞれ (\phi_1, \lambda_1), (\phi_2, \lambda_2)とするときの中心角は、球面三角法の余弦定理より

 \displaystyle
\theta = \arccos(\sin \phi_1 \sin \phi_2 + \cos \phi_1 \cos \phi_2 \cos(\lambda_1 - \lambda_2))

で求められる。よって、2地点間の距離 Lは、

 \displaystyle
L = 6378 \arccos(\sin \phi_1 \sin \phi_2 + \cos \phi_1 \cos \phi_2 \cos(\lambda_1 - \lambda_2))

となる。

補足

球面三角法の余弦定理の導出

図1の球面三角形は角 A, B, Cと辺 a, b, cからできている(この球の半径は1とする)。

図2は、頂点 Aで球面に接する平面を考え、 この平面と

  • 直線 OBとの交点を B'
  • 直線 OCとの交点を C'

とする。
このとき、平面三角形 AB'C' \angle Aの大きさは球面三角形 ABC \angle Aの大きさと等しい。

https://orsj.org/wp-content/corsj/or60-12/or60_12_701.pdf から引用

平面三角形 AB'C' OB'C'は辺 B'C'を共有しているので、平面三角形の余弦定理から、

 \displaystyle

\overline{B'C'}^2 = \overline{AB'}^2  + \overline{AC'}^2 - 2 \overline{AB'} \cdot \overline{AC'} \cos A \\

\quad  \quad \quad = \overline{OB'}^2  + \overline{OC'}^2 - 2 \overline{OB'} \cdot \overline{OC'} \cos a

が成り立つ。
 \triangle OAB' \triangle OAC'は直角三角形なので \overline{AB'} = \tan c, \quad \overline{AC'} = \tan b, \quad
 \overline{OB'} = \frac{1}{\cos c}, \quad \overline{OC'} = \frac{1}{\cos b}が成り立つ。これらを先ほどの式に導入し整理すれば導くことが出来る(途中 \tan ^ 2 \theta = \frac{1}{\cos ^2 \theta}を利用する)。

球面三角法の余弦定理と緯度経度との対応

地球を模した半径 rの球面上に、北極 Nと地点 P(緯度  \phi_1、経度 \lambda_1)と地点 Q(緯度  \phi_2、経度 \lambda_2)を頂点とする球面三角形 NPQを考える(図3)。
 PQの角度を \thetaとして余弦定理を適用すると、辺 NPの角度は \pi / 2 - \phi_1、辺 NQの角度は \pi / 2 - \phi_2 \angle A \lambda_1 - \lambda_2となるので、これらを先ほど導出した式に代入することで中心角を導出できる。

https://orsj.org/wp-content/corsj/or60-12/or60_12_701.pdfから引用

参考資料

https://orsj.org/wp-content/corsj/or60-12/or60_12_701.pdf

meria21.hamazo.tv

vldb.gsi.go.jp

ja.wikipedia.org