画面サイズ(横:/縦:
2都市間の距離を求める(オールPHP版)へ

地球上の2地点間の距離計算の方法
(誤差が若干出るので研究中です)

(1)2つの都市が同じ半球にある場合

【図1】
画像
 上の図1において、地点Aの緯度をα°, 地点Bの緯度をβ°, 2地点間の経度の差をγ°とすれば ,2つの空間ベクトル
画像
画像
のなす角をθとすれば
ボタン
ちょっと!待ったー! (↑)ナンでこうなるの?教えてよ~!→ 三角比を用いて詳しく説明します。
画像
画像だから
画像
だけを求めればよい。なぜかと言うと
画像
画像
となる。上の図1で確認してね!
 地点Aと地点Bにおける地球の半径は「 その地点における緯度 」を用いて求められる。緯度が高くなればなるほど地球の半径は少しずつ短くなる。
下の図2で説明します。
【図2】
画像
上の図2において、地点Aの緯度を北緯α°(←アルファ) 、地点Bの緯度を北緯β°とすれば、地点Aにおける地球の半径は
R1=R-α×(R-R’)÷90で求められます。その証拠にα=0のときはR1=Rとなり、α=90のときは R1=R’となります。
また、緯度が45°のときは、
R1=R-45×(R-R’)÷90=(R+R’)÷2なので、RとR’の平均になります。
イラスト ※表記の都合上「R(下付き小文字1)」をR1と表しています。 (完全数式通りに表記することも可能ですが面倒なので・・・)
画像
となる。上の式(※)に(1)の値を代入すれば、
画像
となります。(↑)上の式を アニメ 【式(1)】 アニメ とおこう!
上の【式(1)】の値がわかれば、2つの空間ベクトルのなす角θがわかります。 cosθから角度θを求めるには逆関数の「アークコサイン関数」を用います。
「アークコサイン」とは、y=cosθからθを求める関数のことでθ=arccos(y)で求められます。 角度θは、0 (ゼロ) ~ π(パイ) の範囲内のラジアン(弧度法)です。
さて、なす角θがわかったら次は下の【図4】で説明します。
図の赤い部分が求める距離ですが、赤い部分は楕円上にあるので、計算が面倒になります。 そこで、計算を楽にする方法として次の2つの方法が考えられます。

【図4】
画像
【第1の方法】
 若干の誤差が出ますが、2地点ABのそれぞれの緯度の平均緯度を求めて(上の図の点C)、その「 平均緯度における地球の半径 」での円周を求めてから2地点間の距離の近似値を求める方法
【第2の方法】
 これもある程度の誤差が出ますが、2地点ABでのそれぞれの「地球の半径」を求めて、その「 地球半径の平均での円周 」を求めてから2地点間の距離の近似値を求める方法(上の図の点D)
【第3の方法】
 これもある程度の誤差が出ますが、2地点ABを通る楕円(上の図の赤い部分が乗っている楕円)の方程式を求めて「 n等分に区分して」それぞれの微小幅での距離を三平方の定理を用いて計算して、 それらを合算することによって「2地点間の距離の近似値」を求める方法
【第4の方法】
もっとも誤差がすくない方法は「 楕円積分を用いる方法 」でしょうが、今後の研究課題としておき、ここでは「第1~第3の方法」で計算します。

2都市間の距離を求める(オールPHP版)へ

(2)赤道をはさんで南半球と北半球にある場合

【図5】
画像
 上の図5のように2つの都市が赤道をはさんで南北の半球にある場合


三角比の基礎を用いて説明するよ! イラスト
【図6】
画像
上の【図6】で説明するよ!
三角比の定義に従えば、
cosα=(底辺)/(斜辺)=OH/R1 だから
(↑)(↓)コサインアルファ
cosα=(地点Aのx座標)/R1 となり、地点Aのx座標=R1cosα と表せます。
また、sinα=(対辺)/(斜辺)=AH/R1 だから
sinα=(地点AのZ座標)/R1 となり、地点AのZ座標=R1sinα と表せます。
よって、点Aの座標は(R1cosα , 0 , R1sinα) となります。
次は「ちょっと(かなり?)ややこしい」けど、点Bの座標の求め方を説明します。

アニメ もどる アニメ



2都市間の距離を求める(オールPHP版)へ