久しぶりに投稿させていただいております。Geoloniaの開発者、小林と申します。最近は、空間ID絡みで「ジオイド高」や「標高」「楕円体高」などの議論が色々あるなか、気になったので調べました。
簡単に説明すると、地球は球ではない。楕円体でもない。地下の微妙な重力の違いによって、平均海水面が変わっている。
ただ、こんな複雑な物体を計算するときに簡単な数式に落とし込むのが困難。できたとしても、点と点の間の距離の計算や、ポリゴンの面積の計算など、全ての計算もかなり複雑になる。そのため、基本的な位置情報計算は「準拠楕円体」という仮想な物が地球と仮定し、この楕円体上に空間情報処理を行う。
さて、ジオイド。ジオイド高とういうのは、準拠楕円体面からの距離をメートルで表現しています。何を指しているかというと、平均海水面となります。つまり、地面がなければ、準拠楕円体+ジオイド高の位置に、海の面がある。
標高は、このジオイド面から地面の距離。
「ジオイド」「標高」「楕円体」、お分かりでしょうか。
システムによって、「高さ」の計算が違ったりします。例えば、
altitude
という関数で標高(ジオイド面からの高さ)が返します。別に、 ellipsoidalAltitude
で準拠楕円体から高さも取得できます。getAltitude()
の関数を使って、準拠楕円体からの高さしか取得できません。標高に変換するには、別途ジオイドを用意して計算しないといけない。それぞれのシステム(特に iOS と Android の違い)を共通言語を喋らせるためには、高さ軸を同じものに変換させないといけない。このために、Geolonia でジオイドのAPIを作りました。
ある緯度軽度のジオイドを参照したい場合は、こちらのAPIを使います
https://api-vt.geolonia.com/api/altitude?lat=35.68116277256452&lng=139.76716335256805
こちらは東京駅の座標となりますが、結果は下記の通りとなります。
{
"lng":139.76716335256805,
"lat":35.68116277256452,
"geoid":"36.662",
"altitude":"3.21"
}
つまり、東京駅の標高(ジオイド面からの地面の距離)は 3.21m で、ジオイド高(準拠楕円体面からジオイド面の距離)は 36.662m となります。
今度、異なるデバイスで位置情報を調べてみて、それぞれの「高さ」の概念を実験してみてください!