らくがき入門

機械学習を始めとしたコンピュータサイエンスを主に扱っています。

pythonで地図上の2時点間の位置関係を求める;

2時点間の緯度、経度、高度が与えられたときに簡易的に2時点間のローカルな位置関係を求めます。 緯度・経度・高度といった情報ではローカルな2時点間の関係性が分かりづらく扱いづらいので、変換します。 具体的には、2時点間の距離とある時点からもう一時点を見たときの方位角、仰角を求めることを目標とします。

以下、国土地理院のサイトと独立行政法人電子航法研究所の資料を参考に作成しています。

https://www.enri.go.jp/~fks442/K_MUSEN/1st/1st060428rev2.pdf

地球上の2時点間の距離

高校などで扱った平面世界での2時点間の距離は、簡単に求めることができたと思いますが、地球上の2時点間ではそれほど簡単には求めることができません。 なぜなら、地球が球体であり、局面上にある2時点間の距離を求めることになるからです。

ジオイドとは

地球は、時点による遠心力の影響で、赤道方向が少し膨らんだ楕円体のような形をしています。 測地学では、世界の界面の平均位置に最も近い「重力の等ポテンシャル面」を「ジオイド」と定めて、これを地球の形状ということにしています。標高はジオイドを基準として定められており、標高はジオイドから測った高さになります。

GPSを用いて標高を求めるには

現在広く活用されているGPSでは、緯度・経度・高度といった幾何学的な位置を求めることができますが、重力を考慮した設計になっていないため標高を直接求めることができません。GPSを用いて標高を求めるためには、ジオイド高がj必要になります。

標高 = 楕円体高 ー ジオイド

ジオイド高は国土地理院が提供している計算サイトで計算することができます。

WGS84

WGS84とは、GPSの基準座標系で、直交座標系です。これはECEFと呼ばれ、地球の重心を原点として地球の自転軸の北極方向をZ軸、Z軸に垂直にグリニッジ子午線の方向をX軸として、これらの軸と直行するように右手系でY軸とした直交座標系です。

ECEFから東をX, 北をY、上空をZとした地平直交座標(ENU)に変換します。 ECEFからENUへの変換は、行列による回転と原点移動で実現できます。詳しくは上記で示した電子航法研究所の資料をご確認ください。

githubにサンプルコードを提示してあります。coordinate_test.pyの9, 10行目で取り扱いたい2時点の緯度・経度・ジオイド高のサンプルデータを与えています。結果表示では、2時点間の距離およびある時点(コードではRx)からみたもう1時点(コードではSat)の方位角、仰角を求めることができます。