球面上の距離
昨日は,Google Maps APIを利用して学会マップなるものを作成しました.
今日は,マップ上の任意の2点間の距離を計算する方法を考えてみました.
Google Maps APIでは,マップ上における"click"イベントを捕まえることで,任意の地点の経度,緯度情報を取得することができます.
そこで,経度,緯度情報から球面上の弧の距離を計算する方法を考えてみました.
経度とは,ロンドンの旧グリニッジ天文台を基点に±180°で等間隔に割り当てられています(参照:経度 - Wikipedia).
緯度とは,赤道を基点に±90°で等間隔に割り当てられています(参照:緯度 - Wikipedia).
経度を,緯度を,地球の半径をrとし,地球の中心を原点とした極座標系を考えます.
ここから,直交座標系におけるx,y,zをそれぞれ計算すると,
となります.
これにより,任意の2点間の直線距離が求められます.
しかし,これは球面上の距離ではありません.
ここで,第2余弦定理(参照:余弦定理 - Wikipedia)により,原点から任意の2点へ引いた2本の直線(地球の中心から引くので長さrの線)に挟まれた角度θが,
任意の2点間の直線距離をdとし,
より,
とあらわされます.
これにより,地球上の2点と,地球の中心とが成す角度が求められます.
以上から,任意の2点間の球面上における距離は,
となります.
(あってるかな?)
実際には,
のように,rを乗ずることなく計算しておき,
とすることで,はじめのものよりも,小数点以下の精度を幾分か高く保持することができます.
Webを探してみると,以下のような計算式も見つかりました(参照:).
球面三角法の公式から,
経度:x1,x2
緯度:y1,y2
とすると,
cosθ=cos(y1)*cos(y2)*cos(x1-x2) + sin(y1)*sin(y2)
(ただし,θ(rad))2点間の距離=6369(km)*θ
により求められる.
どちらの方法で求めても,結果は同じになります.
出来上がったもの→