国土地理院のジオイド・セミダイナミック補正の計算式です。パラメータファイルから4隅の値を取得して内装法で計算します。
1)ジオイド計算関数
GeoDiveExaで使用しているジオイド計算関数(naisouHosei)です。パラメータファイル日本のジオイド2011」(Ver.1)を使用して、計測点を含む4隅のジオイド高から内挿法計算で求めます。当初は(B)の様に素直なベクトル計算してました。所が国土地理院のサイトを見ていたら(A)の様な1行計算式が出てました。最初は何しているのか不明でしたが、(B)を変形していくと(A)になりました。さすが国土地理院です。地図アプリは多くの点を変換する必要が有りますので少しでも高速計算する様に徹底的に単純化した結果です。ありがたく使用させてもらいました(=今調べたら当該サイトが見つかりませんでした)。
///
///内挿法計算により、指定点のジオイド値を求める
///
private double naisouHosei(
double dLatPsent, double dLonPsent,
float geoidJpn00, float geoidJpn01,
float geoidJpn10, float geoidJpn11)
{
#if true //(A)国土地理院サイトで見つけた1行計算式
double geoid = (1 - dLatPsent) *
(1 - dLonPsent) * geoidJpn00 +
(1 - dLatPsent) * dLonPsent * geoidJpn01 +
dLatPsent * (1 - dLonPsent) * geoidJpn10 +
dLatPsent * dLonPsent * geoidJpn11;
#else //(B)内挿法をそのまま実装した計算式
// Low=経度差分移動
double lonL = geoidJpn00 + (geoidJpn01
- geoidJpn00) * dLonPsent;
// Hig=経度差分移動
double lonH = geoidJpn10 + (geoidJpn11
- geoidJpn10) * dLonPsent;
// 緯度差分移動
double geoid = lonL + (lonH - lonL) * dLatPsent;
#endif
return geoid;
}
2)ジオイド高計算の内挿法
地図で使う内挿法説明サイトを探しましたが見当たりませんでした。かろうじて探したのが日本測量協会の計算式集です。
dLatPsentがt dLonPsentがλですね。geoidJpnXXが、Nxxになります。高校数学のベクトル計算ですね。

コメントを残す