TNTmips ジオリファレンスの考え方
TNTmips では、地理座標が付与されたデータを扱います。普通、地理座標を持ったデータと言えば、経緯度で表現された点や線を想像しますが、TNTmips
は。何種類かの方法で地理座標を管理します。
最も簡単なジオリファレンスは、インプライド・ジオリファレンス(Implied Georeference)と呼ばれるものです。このデータは、データの値自体が地理座標としての値を持ちます。すぐに思い付くのは経緯度ですが、TNTmips
では、測地系(TNTmips でサポートされる測地系はこちら(準備中))も含まれます。XY 座標で表されるデータは、投影法(含む測地系)を与えれば、経緯度になります。つまり、経緯度であろうが、投影法を与えた上での
XY 座標であろうが、場所自体が同じであれば、図法によって座標の値が異なるだけであって、それ自身の位置は同じです。
例えば、値が経緯度で表現されたデータと、値があるゾーンの UTM 図法で投影された XY 座標を持つデータとでは、通常はどちらかを図法変換したデータを作成してから重ねあわせします。しかし、TNTmips
では、この様な事は意識的に行う必要がありません。この仕掛けは、RCV ファイルの構造にあります。地理情報は TNTmips ではオブジェクトとして管理されていますが、これを修飾する情報として、ジオリファレンス・サブオブジェクトを持ちます。
この例では、値が経緯度で表現されたデータは、オブジェクトの中には経緯度の値をもち、サブオブジェクトの中には、図法(経緯度は図法ではありませんが)が経緯度である、と言う情報を持ちます。値が
UTM の XY 座標で表現されたデータは、オブジェクトの中には XY の値を持ち、サブオブジェクトの中には、図法が UTM である(無論、ゾーンの情報を持ちます)、と言う情報を持ちます。例えば、TNTmips
がこの2つのデータを画面に表示する場合、オブジェクトを修飾するサブオブジェクトを参照して、自動的に図法変換しながら画面表示します。この意味では、サブオブジェクトはメタデータと考えることも出来ます。
TNTmips では、さらに、コントロールポイント型ジオリファレンスと呼ばれる考え方があります。今、紙に描かれた地図をスキャンして、他の地図と重ねあわせしたい、と考えましょう。この紙の地図は、当然地図ですから、元々、経緯度をある図法で投影して、ある縮尺で描かれたものです。この様子を、以下の図に示します。
経緯度をφλ、これを図法で投影したときの座標を XY、この地図をフラットベッドスキャナーで読んだ時の座標を xy とします。X 及び
Y は、図法が決まっているので、
X = F(φ, λ)
Y = G(φ, λ)
で表せます。逆に、明示的に表現できるか否かは別にして、φλは、これの逆関数になります。要するに、XY と投影法が分かれば、φλは求まります。
問題は、XY と xy との関係です。フラットベッドのスキャナーで読んだのだから、歪が無いと仮定すれば、XY と xy
とは線型関係(アフィン変換)になります。式は、
X = ax + by + c
Y = dx + ey + f
になります。係数 a から f がわかれば、スキャナーの座標 xy から XY が求まって、図法と測地系が分かっていますから、φλが求まります。
地図には、通常格子線があります。格子線のグリッドの点の XY 座標と xy 座標を3点与えれば、連立一次方程式が立ち、係数
a から f が計算できます。格子線のグリッドの既知の座標を4点以上与えれば、最小自乗法で a から f が計算できます。
TNTmips では、この情報をサブオブジェクトに持っています。つまり、スキャナーで読んだ地図の投影法の情報、XY と
xy の点組み合わせです。実際にデータを画面に表示するときは、そのタイミングで a から f の係数を計算して、さらに必要であれば、経緯度に座標を戻し、表示すべき図法にもう一度投影します。高度な事を自動的に処理していますね。
XY と xy の関係は、アフィンとは限りません。スキャナーで読むのが航空写真の場合はプロジェクト変換を使用します。また、大型のリニア型スキャナーでは、ローラーで紙を巻き込みますので、読み込んだ時にラスターに歪が発生します。この場合、XY
と xy の関係は一次式で近似すると精度に大きな影響を及ぼす結果になります。この様な場合は、2次以上の多項式を変換モデルとして使用し、残差が要求精度を満たすように、多項式の次数を調整します。