DTEDデータを用い、地球上での見通しを判定する
具体的なデータを用いて目的を果たすプログラムを作成する例として、地上の特定の地点(点A)から、航空機等の空中の任意の地点(点B)存在するオブジェクトを見通せるのかプログラムで判定する際の考え方を提示します。
なお、地上の地形については、国土地理院やNASAなどから広く公開しているDTEDデータを使うことを想定します。
DTEDデータ以外でも基本はフォーマットが違うだけなので、考え方としては同じです。
また、今なら各種有益なライブラリを使うこともできますが、ここでは考え方を理解するために1から考えます。
レーダーの場合、レーダー波の波長によっては空気密度の違いなどにより湾曲するため見通し線が曲線になりますが、考え方自体は同じです。
また、目的に応じ判定の仕方が変わる場合もありますが、ここでは基本だけ述べます。
使用する座標系と変換
地上や空中の地点については一般的に緯度経度や海抜高度が使われると思いますが、地球の丸みが影響を与えるほど2点間が遠い場合は、見通し線(LOS:Line of Sight)を決定するためにはECEF座標系を使うのが簡単です。
DTEDデータなどは緯度経度で提供されていますので、緯度経度とECEF座標の相互変換が必須です。
この相互変換には、測地系やワールドモデルなどが必要ですが、ここでは説明を省略します。
判定の考え方
基本的には、点Aと点B間の直線(見通し線)上の各ポイントでDTEDデータの標高を取得し、その標高が見通し線の高さを超えていれば見通しが遮蔽された(見通せない)と判定できます。(下図の赤点線が見通し線のイメージ)
また、見通し線が地表を下回る場合も、地平線に妨げられて見通せない状態となります。
この判定で問題となるのは、見通し線がECEF座標系の線分(3次元ベクトル)であるのに対して、DTEDデータが緯度経度及び地表からの海抜高度となっており、単純に比較できない点です。
様々な判定方が考えられますが、DTEDデータのメッシュ単位より細かく判定しても意味がないため、判定はDTEDデータのメッシュ単位で行われるのが一般的でしょう。(下図は地表のDTEDメッシュイメージ。見通し線が通る灰色部分の標高を判定する)
またECEF座標を基準として判定するとDTEDデータのメッシュ単位で大量の計算が発生してしまうため、見通し線を近似的に緯度経度及び海抜高度の座標系に変換してからDTEDメッシュ単位で標高と判定するループを回す方が単純になります。(下図の赤点線が変換した見通し線のイメージ。地表が平面となるよう変換するため見通し線は下に膨らむ曲線となる)
まとめ
目的に合わせて便利なものを使う事も必要ですが、実装の難易度や計算量に応じて、適切な代案を採用する方が良い場合もあります。