GPSのデータから距離を計算するために基本的なこと〜ジオイド・緯度経度の長さは?

GPSから地表の位置のデータを取得すると、それはすなわち緯度と経度の情報である。その情報から距離などを計算する。

緯度と経度から距離を計算するというのは、必ずしもGPSとは限らない。しかも、Google Mapで表示してしまえば、何の手間もなく、一瞬にして2地点の距離を求めることができる。

地球上の2地点の距離を計算するために

それ前に書きたいことがたくさんある。地球は扁平な球体であって、赤道の一周が一番距離が長い。南北の半径の実測値の最良推定値は6356.7519kmで、同じく赤道半径の実測値の最良推定値は6378.1366kmという。21km程度の差があるが、0.3%ほどである。大きいというのか小さいというのか。

およそ半径6370kmの球というモデルを考えると2地点間の距離は非常に単純なものとなる。A地点の緯度と経度を(緯度φa, 経度λa)、B地点の緯度と経度を(緯度φb, 経度λb)として、距離d(km)を求めるのは次の式で得られる。

$$d = 6370・aarccos(sinφ_{a}sinφ_{b}+cosφ_{a}cosφ_{b}cos(λ_{a}-λ_{b}))$$

地球の本当の形は分からない。これは言い方が変だ。地球はここに厳然と存在するのだけれども、海があり山がある。実は、重力も場所によって異なっている。地下に重い部分があれば重力は強い。

地球が扁平な球体だと言っても一律に扁平なのではなくて、デコボコしている。デコボコしているから全て観測値で埋めて計算するには膨大なデータがいるし、日常的に計算ができない。

ジオイド

現実問題として、実測値のデータでは地表面を取り扱えない。データは全く足りないし、データが集まっても膨大すぎて扱えない。そこで、地球の形に近似した楕円体のモデルを作って、計算式を用いておおよその形を作ってしまおうという考え方ができた。陸地は非常にデコボコしていて起伏が多い。一方で、海は海底も大きな凸凹は少なく、海表面も高低の変化はあるものの陸地ほどの大きな変化はない。

海面と同じ高さを陸地まで広げていって、重力が均衡する高さを求めたモデルを考える。すると海面が陸地に延長したかのような、仮想的に静止したものを考える。その平均海面をたどった表面を持つ地球のモデルのことを「ジオイド」と呼ぶ。

ジオイドそのものではないが、ジオイドを表現するのに適した回転楕円体のモデルが何種類か考案された。その一つがGRS80楕円体というモデルで、それはつまり仮想的な数式であるわけだが、このGRS80楕円体を日本でも2002年から使用することとなり、日本の経度、緯度、標高は、GRS80に照らして、求められている。

緯度、経度の長さ

緯度と経度は、地球が球体でないため、回転楕円体にほぼ近い形状をしているために、均一ではない。

緯度が高くなると、南極や北極に近くなるわけで、経度1度の長さが短くなる。赤道では経度1度の長さ、つまり東西の距離が一番大きくなる。極端に言えば、北極点から1mの距離で経線に沿って一周すると、その距離はおよそ3.14mしかない。1度の長さはその360分の1である。

その一方、緯度1度の長さは、大きく変わることはない。地球の形状が扁平であるため緯度が高い方が緯度1度の距離は若干長い。とはいえ赤道と比べても1%程度の差である。

おおよそ平面とみなせる程度の距離であれば、2地点の中間地点の緯度と経度の1度の距離を基準にして計算すれば良い。

2地点間の緯度と経度の差を距離に換算して、それぞれを二乗した和の平方根を計算すれば近似的な距離が求められる。北緯35度、東経139度の場所では、緯度1度は110.941km、経度1度は91.288kmとなる。(この計算も以降に説明)

その場合に、x=110.941km、y=91.288kmとして、A地点の緯度と経度を(緯度φa, 経度λa)、B地点の緯度と経度を(緯度φb, 経度λb)、距離をdとする。

$$d = \sqrt {(x(φ_{a} – φ_{b}))^{2} + (y(λ_{a} – λ_{b}))^{2} }$$

平面とみなしても良い近距離であれば、上の式で距離dが求められる。球面としての考慮が必要な場合には、ここから先少し難しくなってくるので、次回に説明する。


次の記事:

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


前の記事:

GPSはどうして位置が分かるのか?衛星測位システムの仕組み・計算方法はなぜ難しいの?

 

コメントを残す

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

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