緯度経度から2地点間の距離を計算する!Google方式とヒュベニ式・表計算ソフトで計算できる・GPSデータも使える

地上の2地点の距離を緯度と経度から計算する。地球は真球ではなく回転楕円体に近いので、より高い精度を求めるならば回転楕円体による計算をする必要がある。しかし地球を真球をとして計算しても実用的には十分な数値が得られる。ヒュベニの近似式による計算方法も追加した。

緯度経度から2地点の距離を計算

真球として計算するので、長半径と短半径のどれを使うのかというと、平均半径を使用する。平均半径にも色々な考え方があり、いろいろな数値がある。最初はGoogle Mapで使用されている方法で計算する。真球として計算され、地球の半径を6371kmとしている。

球面上の最短距離(D)を求める公式を下に示す。地中を貫通する最短距離ではなく、表面に沿った距離だ。単位はkmである。2地点の座標は地点1が(緯度=lat1, 経度=lon1)、地点2(緯度=lat2, 経度=lon2)とする。

$$D = 6371・arccos(cos(lat1)+cos(lat2)\\*cos(lon2-lon1)\\+sin(lat1)*sin(lat2))$$

ここで緯度と経度はラジアンでの表記が求められる。度数をラジアンに換算するには、πを掛けて180で割れば良い。

エクセルなど表計算ソフトで計算する

表計算ソフトに次のように緯度と経度を入力する。

A B
1 lat1 36
2 lon1 138
3 lat2 34
4 lon2 136

別のセルには次のように入力する。

=6371 * ACOS(COS(B1*PI()/180) * COS(B3*PI()/180) * COS(B4*PI()/180-B2*PI()/180) + SIN(B1*PI()/180) * SIN(B3*PI()/180) )

すると、上記の二つの緯度と経度から次のような数値が計算される。

287.461514159 のように表示されることが多いだろうと思う。単位はkmなので、おおよそ287.4kmと計算できる。国土地理院サイトでは287,325.451(m)である。

また北緯と南緯、東経と西経があるので、ここでは北緯はプラスの数値で、南緯はマイナスの数値とし、同様に東経をプラスで西経をマイナス数値にすれば、この式で計算できる。

度数は、度分秒ではなく十進の数値で入れる。北緯であれば35.9876のように設定する。

回転楕円体としての距離計算

回転楕円体として距離を計算するのは実は大変に難しいことが分かった。簡単に計算できる公式が見つからない。

国土地理院のサイトでは、かなり正確と思われる距離の計算を得ることができる。しかし、それでも実測ではないので、あくまでも理論値ということになる。GRS80(<-besselも選択できる)という地球に近似した楕円体モデルの上での計算になる。

地球は、地殻やマントルも均一ではないし、地下の重金属の分布によっても重力の不均衡がある。現実の平面は実測しないと分からないが、ある程度の誤差を受け入れることで、計算が容易になるということだ。

国土地理院の式は繰り返しの計算指示などがあり複雑でシステム化しにくいので、たとえ精度はもっと劣っていてももっと簡単で扱いやすい計算式がないかと探す。

ポーランド系アメリカ人のThaddeus Vincentyが開発した数式もVincenty法として使われており精度も高いようだが、Vincenty法にも反復計算が含まれるので表計算ソフトでは簡単に計算できない。

そこで、K.ヒュベニ(Karl Hubeny)が1950年代に考案した平均緯度式の測地線長を算出方法というのを試してみる。

ヒュベニの近似式

日本では、カシミール3Dで使用されたことで話題になり、K.Hubenyの簡略式がこの業界では有名になった。

$$d=\sqrt { (M・\Delta φ)^2 + (N・cos φ・\Delta λ)^2 }$$

d:2点間の距離(単位はメートル)
φ:2点の平均緯度
Δφ:2点の緯度差
Δλ:2点の経度差
a:回転楕円体の長半径(6,378,137m)
M:子午線曲率半径
N:卯酉線曲率半径
e:離心率
$$M = \frac{a(1-e^2)}{ \sqrt {((1-e2*sinφ^2)^3)} } $$
$$N = \frac{a} {\sqrt{ (1-e2*sinφ^2)} } $$
$$e = \sqrt{1 – \frac {{b}^2}  {{a}^2} } $$

定数として計算できるものを代入して簡略化していく。

d = sqrt((M*Δφ)^2+(N*cos(φ)*Δλ)^2)

M = 6334834 / sqrt ((1-0.0066744*sin(φ)^2)^3)
N = 6377397 / sqrt (1-0.0066744*sin(φ)^2)
φ, Δφ, Δλ はラジアンに換算して代入する

表計算ソフトで一発で計算するための式は以下の通り。セルの緯度経度の設定は上記と同じ。単位はm。

= sqrt ((6334834 / sqrt ((1-0.006674*sin((B1+B3)/2*Pi()/180)^2)^3)*(B1-B3)*Pi()/180)^2 +( 6377397 / sqrt (1-0.006674*sin((B1+B3)/2*Pi()/180)^2)*cos((B1+B3)/2*Pi()/180)*(B2-B4)*Pi()/180)^2)

平均緯度を単純に2地点の緯度の算術平均となっている。緯度が離れていたり、距離が長い場合には、算術平均では少しまずいのではないかとも思うのだが、おおよそそれらしい数値が得られる。上記の例と同様の緯度経度で計算すると、287,309.947mと計算される。真球としての計算とは152m程度の差がある。

真球近似式とヒュベニ近似式を比較

一番最初の例をまとめて比較してみる。

(N36, E138) –> (E38, E136) 距離(m) 誤差(m)
真球近似式 287,461.514 136.063
ヒュベニ近似式 287,309.948 -15.503
国土地理院サイト 287,325.451 0.000

この例では、ヒュベニ近似式は真球近似式よりも誤差が少なかった。

また、地球の赤道円周は40075kmで、赤道から極までの長さは10001.97kmとされている。

実測値 真球 ヒュベニ
赤道円周 40075km 40030km 40070km
赤道から極 10001.97km 10007.54km 10000.75km

と計算してみると、ヒュベニの式の方が実測値に近いことがわかる。

東京(緯度:35.675899、経度:139.744854)、ロンドン(緯度:51.475831、経度:-0.130997)の例をみると、国土地理院の計算サイトでは測地線長:9,588,734.165(m)となるが、真球計算では9565.134km、ヒュベニでは11432.697kmとヒュベニの誤差が耐え難い大きさになる。

ヒュベニでは始点と終点が、緯線と経線が直角となる三角形の斜辺に近似できる時には有効だということだ。上記の東京=ロンドンのように緯度が上がってまた下がるようなコースをとる場合にはうまく計算できない。

東京-沖縄を測ってみると、国土地理院サイトでは1,553,290.759(m)が、真球で1553.679km、ヒュベニで1555.532kmとなる。距離が1000km以下となる場合に適しているようだ。

地表の距離を求めるのは、実は複雑である。国土地理院サイトにある計算式はあまりに複雑である。途中である値の絶対値が10のマイナス15乗を下回るまで反復して計算せよという部分がある。表計算ソフトの1セルには書けないのだ。

回転楕円体の表面の最短距離を計算するのはなぜこんなに複雑なのか。近似値ではない値を求めようとしても単純にはいかないということには驚かされる。


前の記事:

地球上の緯度経度1秒の距離を計算する:表計算ソフトでも簡単に計算できる・GPSにも応用できる

緯線に沿った距離、あるいは経線に沿った距離を求めるというのであれば、こちらの記事の計算では回転楕円体として計算しているので精度が高い。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください