JGD2011とJGD2024の違い – GeoDiveExaのJGD2024対応(2)

, ,

概要

GeoDiveExaアプリに、日本の新しい測地系「JGD2024(日本測地系2024)」への対応機能を実装しました。本記事では、JGD2024とは何か、JGD2011との違い、そして実装の詳細について解説します。

重要な前提:RTK補正済みWGS84 = JGD2011

まず、最も重要な前提を明確にします:

RTK(リアルタイムキネマティック)GNSS受信機で取得される補正済みWGS84座標は、実質的にJGD2011と同じです(=JGD2024と緯度経度は同じ)。

これは、RTK補正によって以下が実現されるためです:

  • GRS80楕円体の使用(JGD2011と同じ)
  • 2011年の地殻変動を反映した座標系
  • センチメートル級の高精度測位

したがって、GeoDiveアプリでRTK受信機から取得したWGS84座標は、JGD2011座標として扱う事にします。

日本の測地系の変遷

1. Tokyo(日本測地系)

  • 使用期間: 1918年~2002年
  • 楕円体: Bessel楕円体
  • 特徴: 日本独自の測地系、世界測地系との差が約400m

2. JGD2000(日本測地系2000)

  • 導入年: 2002年
  • 楕円体: GRS80楕円体
  • 特徴: 世界測地系に準拠、Tokyo測地系から約400mの位置ずれ

3. JGD2011(日本測地系2011)

  • 導入年: 2011年
  • 楕円体: GRS80楕円体(JGD2000と同じ)
  • 特徴: 2011年東日本大震災による地殻変動を反映
  • JGD2000との差: 東北地方で最大5m程度の位置ずれ

4. JGD2024(日本測地系2024)

  • 導入年: 2024年
  • 楕円体: GRS80楕円体(JGD2011と同じ)
  • 基準日: 2024年2月1日
  • 特徴: ジオイド2024による標高が修正された(緯度経度は同じ)
  • 疑問:2011年以降の地震による地殻変動対応はどうするのか?

測地系間の変換経路

正しい変換の流れ

RTK補正済みWGS84 = JGD2011
        │
        ├─→ JGD2024(ジオイド2024対応)
        │
        └─→ JGD2000(PatchJGD逆補正)
                │     ↓
                │  2003~2011年地震の地殻変動を戻す
                │  (東北地方で最大5m)
                │
                └─→ Tokyo(TKY2JGD逆補正)
                      ↓
                   約400mの位置ずれ補正

使用する補正パラメータファイル

  1. TKY2JGD.par(392,323点)
  • Tokyo測地系 ⇔ JGD2000 の変換補正
  • 日本測地系の歪みを補正
  1. 2003年〜2011年までの.par
  • JGD2000 ⇔ JGD2011 の地震による地殻変動表したファイル
  • 2011年東日本大震災などの地殻変動を補正
  1. 2012年〜2024年までの.par
  • 現在の(GPSなどの測定)位置 ⇔ JGD2011(JGD2024) の地震による地殻変動表したファイル
  • 2012年以後の熊本地震などの地殻変動を補正
  1. SemiDyna2024.par(21,134点)
  • CLAS受信結果の補正(=JGD2024への変換)
  • プレート運動による定常的な地殻変動を補正

実装の詳細

1. WGS84とJGD2011の関係

/// <summary>
/// WGS84からJGD2011に変換
/// RTK補正済みWGS84はJGD2011と同じなので、そのまま返す
/// </summary>
public static (double Latitude, double Longitude) WGS84ToJGD2011(
    double latitude, double longitude)
{
    return (latitude, longitude);
}

/// <summary>
/// JGD2011からWGS84に変換
/// JGD2011とWGS84は同じなので、そのまま返す
/// </summary>
public static (double Latitude, double Longitude) JGD2011ToWGS84(
    double latitude, double longitude)
{
    return (latitude, longitude);
}

2. WGS84からJGD2000への変換

/// <summary>
/// WGS84からJGD2000に変換
/// RTK補正済みWGS84はJGD2011と同じなので、JGD2011→JGD2000の変換を行う
/// </summary>
public static (double Latitude, double Longitude) WGS84ToJGD2000(
    double latitude, double longitude)
{
    try
    {
        // RTK補正済みWGS84 = JGD2011 → JGD2000の変換(PatchJGD逆補正)
        return JGD2011Correction.JGD2011ToJGD2000WithCorrection(latitude, longitude);
    }
    catch (Exception ex)
    {
        Log.Warn($"WGS84ToJGD2000 エラー: {ex.Message}");
        return (latitude, longitude);
    }
}

重要: ここでPatchJGD逆補正が行われます。2011年の地震による地殻変動を「戻す」処理です。

3. JGD2000からWGS84(JGD2011)への変換

/// <summary>
/// JGD2000からWGS84に変換
/// JGD2000→JGD2011の変換を行い、結果はWGS84と同じ
/// </summary>
public static (double Latitude, double Longitude) JGD2000ToWGS84(
    double latitude, double longitude)
{
    try
    {
        // JGD2000 → JGD2011(=WGS84)の変換(PatchJGD補正)
        //.  JGD2000ToJGD2011WithCorrection:
        //       2003~2011年までの地震地殻変動ファイルを全て時間軸に沿って適用する
        return JGD2011Correction.JGD2000ToJGD2011WithCorrection(latitude, longitude);
    }
    catch (Exception ex)
    {
        Log.Warn($"JGD2000ToWGS84 エラー: {ex.Message}");
        return (latitude, longitude);
    }
}

4. WGS84からTokyoへの変換(2段階変換)

/// <summary>
/// WGS84からTokyo座標系に変換
/// RTK補正済みWGS84はJGD2011と同じなので、JGD2011→JGD2000→Tokyoの2段階変換
/// </summary>
public static (double Latitude, double Longitude) WGS84ToTokyo(
    double latitude, double longitude)
{
    try
    {
        // ステップ1: WGS84(=JGD2011) → JGD2000(PatchJGD逆補正)
        var (jgd2000Lat, jgd2000Lon) = WGS84ToJGD2000(latitude, longitude);

        // ステップ2: JGD2000 → Tokyo(TKY2JGD逆補正)
        return TokyoJGDCorrection.JGD2000ToTokyoWithCorrection(jgd2000Lat, jgd2000Lon);
    }
    catch (Exception ex)
    {
        Log.Warn($"WGS84ToTokyo エラー: {ex.Message}");
        return (latitude - 12.0 / 3600.0, longitude - 17.0 / 3600.0);
    }
}

5. TokyoからWGS84への変換(2段階変換)

/// <summary>
/// Tokyo座標系からWGS84に変換
/// Tokyo→JGD2000→JGD2011(=WGS84)の2段階変換
/// </summary>
public static (double Latitude, double Longitude) TokyoToWGS84(
    double latitude, double longitude)
{
    try
    {
        // ステップ1: Tokyo → JGD2000(TKY2JGD補正)
        var (jgd2000Lat, jgd2000Lon) = TokyoJGDCorrection.TokyoToJGD2000WithCorrection(
            latitude, longitude);

        // ステップ2: JGD2000 → JGD2011(=WGS84)(PatchJGD補正)
        return JGD2011Correction.JGD2000ToJGD2011WithCorrection(jgd2000Lat, jgd2000Lon);
    }
    catch (Exception ex)
    {
        Log.Warn($"TokyoToWGS84 エラー: {ex.Message}");
        return (latitude + 12.0 / 3600.0, longitude + 17.0 / 3600.0);
    }
}

6. WGS84からJGD2024への変換

RTK補正された結果の緯度経度は同じなので、ジオイド2024による標高のみ変換する

7. JGD2024からWGS84への変換

RTK補正された結果の緯度経度は同じなので、ジオイド2024による標高のみ変換する

セミ・ダイナミック補正の実装

SemiDynaCorrection.csクラス

public class SemiDynaCorrection
{
    private static readonly Dictionary<string, MeshCorrection> meshCorrectionData = new();

    /// <summary>
    /// JGD2011からJGD2024に変換(セミ・ダイナミック補正)
    /// </summary>
    public static (double lat, double lon, double height) JGD2011ToJGD2024WithCorrection(
        double jgd2011Lat, double jgd2011Lon, double height)
    {
        // メッシュコードから補正値を取得
        var meshCode = MeshCodeUtility.GetMeshCode(jgd2011Lat, jgd2011Lon, 3);

        if (!meshCorrectionData.TryGetValue(meshCode, out var correction))
        {
            // 補正パラメータが見つからない場合はそのまま返す
            return (jgd2011Lat, jgd2011Lon, height);
        }

        // 双線形補間による高精度補正
        var (dB, dL, dH) = GetInterpolatedCorrection(jgd2011Lat, jgd2011Lon);

        // 補正を適用
        // dB, dLは秒単位、dHはメートル単位
        double jgd2024Lat = jgd2011Lat + dB / 3600.0;
        double jgd2024Lon = jgd2011Lon + dL / 3600.0;
        double jgd2024Height = height + dH;

        return (jgd2024Lat, jgd2024Lon, jgd2024Height);
    }

    /// <summary>
    /// JGD2024からJGD2011に変換(セミ・ダイナミック補正の逆変換)
    /// </summary>
    public static (double lat, double lon, double height) JGD2024ToJGD2011WithCorrection(
        double jgd2024Lat, double jgd2024Lon, double height)
    {
        // 逆変換では補正値の符号を反転
        var meshCode = MeshCodeUtility.GetMeshCode(jgd2024Lat, jgd2024Lon, 3);

        if (!meshCorrectionData.TryGetValue(meshCode, out var correction))
        {
            return (jgd2024Lat, jgd2024Lon, height);
        }

        var (dB, dL, dH) = GetInterpolatedCorrection(jgd2024Lat, jgd2024Lon);

        // 補正を逆方向に適用
        double jgd2011Lat = jgd2024Lat - dB / 3600.0;
        double jgd2011Lon = jgd2024Lon - dL / 3600.0;
        double jgd2011Height = height - dH;

        return (jgd2011Lat, jgd2011Lon, jgd2011Height);
    }
}

動作確認結果

11地点でのテスト結果

起動時に以下の11地点で座標変換テストを実施し、すべて正常に動作することを確認しました:
参考:📊 座標変換精度検証:Geoアプリと国土地理院PatchJGD比較

変換の具体例

例1: 東京都庁(WGS84 → 各測地系)

【東京】
元の座標(WGS84=JGD2024): 緯度=35.68100000, 経度=139.76700000, 高さ=100.000m, ジオイド高=20.000m
  計算されたジオイド高: 2024=36.7603m, 2011=36.6592m, 差分=0.1011m
  → Tokyo: 緯度=35.67776303, 経度=139.77022979, 高さ=83.375m, ジオイド高=36.625m
  → JGD2000: 緯度=35.68100007, 経度=139.76699632, 高さ=83.341m, ジオイド高=36.659m
  → JGD2011: 緯度=35.68100000, 経度=139.76700000, 高さ=83.341m, ジオイド高=36.659m
  → JGD2024: 緯度=35.68100000, 経度=139.76700000, 高さ=83.240m, ジオイド高=36.760m
  → JGD2024B: 緯度=35.68100000, 経度=139.76700000, 高さ=83.240m, ジオイド高=36.760m

変換の流れ:

  • WGS84(=JGD2011) → JGD2000: PatchJGD逆補正で0.01m移動(東京は地震の影響極小)
  • JGD2000 → Tokyo: TKY2JGD逆補正で約470m移動(測地系の違い)

例2: 仙台駅周辺(WGS84 → 各測地系)

【仙台】
元の座標(WGS84=JGD2024): 緯度=38.26024700, 経度=140.74000000, 高さ=100.000m, ジオイド高=20.000m
  計算されたジオイド高: 2024=42.0430m, 2011=41.9061m, 差分=0.1370m
  → Tokyo: 緯度=38.25728575, 経度=140.74338755, 高さ=78.092m, ジオイド高=41.908m
  → JGD2000: 緯度=38.26025397, 経度=140.73996777, 高さ=78.094m, ジオイド高=41.906m
  → JGD2011: 緯度=38.26024700, 経度=140.74000000, 高さ=78.094m, ジオイド高=41.906m
  → JGD2024: 緯度=38.26024700, 経度=140.74000000, 高さ=77.957m, ジオイド高=42.043m
  → JGD2024B: 緯度=38.26024700, 経度=140.74000000, 高さ=77.957m, ジオイド高=42.043m

変換の流れ:

  • WGS84(=JGD2011) → JGD2000: PatchJGD逆補正で3.37m移動(2011年地震の影響が大きい)
  • JGD2000 → Tokyo: TKY2JGD逆補正で約479m移動(測地系の違い)

例3: 能登(石川県かほく市)(WGS84 → 各測地系)

【能登(石川県かほく市)】
元の座標(WGS84=JGD2024): 緯度=36.71980000, 経度=136.70670000, 高さ=100.000m, ジオイド高=20.000m
  計算されたジオイド高: 2024=37.7455m, 2011=37.6089m, 差分=0.1366m
  → Tokyo: 緯度=36.71676520, 経度=136.70966269, 高さ=82.382m, ジオイド高=37.618m
  → JGD2000: 緯度=36.71980121, 経度=136.70669556, 高さ=82.391m, ジオイド高=37.609m
  → JGD2011: 緯度=36.71980000, 経度=136.70670000, 高さ=82.391m, ジオイド高=37.609m
  → JGD2024: 緯度=36.71980000, 経度=136.70670000, 高さ=82.255m, ジオイド高=37.745m
  → JGD2024B: 緯度=36.71979997, 経度=136.70669978, 高さ=82.255m, ジオイド高=37.745m

例4: 熊本(宇土市)(WGS84 → 各測地系)

【熊本(宇土市)】
元の座標(WGS84=JGD2024): 緯度=32.65415900, 経度=130.68023700, 高さ=100.000m, ジオイド高=20.000m
  計算されたジオイド高: 2024=32.8972m, 2011=32.7815m, 差分=0.1157m
  → Tokyo: 緯度=32.65077446, 経度=130.68256652, 高さ=87.210m, ジオイド高=32.790m
  → JGD2000: 緯度=32.65415900, 経度=130.68023700, 高さ=87.218m, ジオイド高=32.782m
  → JGD2011: 緯度=32.65415900, 経度=130.68023700, 高さ=87.218m, ジオイド高=32.782m
  → JGD2024: 緯度=32.65415900, 経度=130.68023700, 高さ=87.103m, ジオイド高=32.897m
  → JGD2024B: 緯度=32.65415952, 経度=130.68024078, 高さ=87.103m, ジオイド高=32.897m

変換における注意点

  1. JGD2011→JGD2000: 2011年地震の地殻変動を「戻す=逆変換」処理(東北で最大5m)
  2. 補正の方向: 地域によって異なる(プレート運動の方向に依存)

TransformFromTo()による統合変換

任意の測地系間の変換

public static (double lat, double lon, double height) TransformFromTo(
    double lat,
    double lon,
    double height,
    CoordinateSystemType from,
    CoordinateSystemType to)
{
    // WGS84 → JGD2024
    if (from == CoordinateSystemType.WGS84 && to == CoordinateSystemType.JGD2024)
    {
        return WGS84ToJGD2024(lat, lon, height);
    }

    // JGD2024 → WGS84
    if (from == CoordinateSystemType.JGD2024 && to == CoordinateSystemType.WGS84)
    {
        return JGD2024ToWGS84(lat, lon, height);
    }

    // その他の組み合わせも実装...

    return (lat, lon, height);
}

まとめ

実装のポイント

  1. RTK補正済みWGS84 = JGD2011: これが最も重要な前提
  2. JGD2000への変換: PatchJGD逆補正が必要(2003~2011年地震の影響を戻す)
  3. Tokyoへの変換: 2段階変換(JGD2011→JGD2000→Tokyo)
  4. JGD2024への変換: ジオイド2024を適用して標高を変更する
  5. parファイルの活用: 高精度な補正パラメータ(国土地理院提供)

測地系の使い分け

測地系用途精度
JGD2024現在の高精度測量最高(2024年基準)
JGD2011RTK-GNSS測位高(2011年基準)
JGD2000過去データとの整合性中(2000年基準)
Tokyo古い地図・データとの照合低(1918年基準)

今後の展開

  1. 時系列補正: 任意の日付での座標値計算
  2. 逆変換の精度向上: 反復計算による高精度化
  3. 2011年以降の地震による地殻変動とプレート変動を反映した座標変換
    参考:🗾 日本の測地系の変遷と実務対応:TOKYOからJGD2024Bまで

注意:保証はありません

ここに載せたプログラムはあくまでも参考です。座標補正を行った結果について何ら保証はありませんし、国土地理院の結果と同じとは限りません。

参考情報

データソース

  • SemiDyna2024.par: 国土地理院提供(21,134点)
  • jgdMerge2011.par: 国土地理院提供の2003年から2011年までの地震による地殻変動パラメータファイルを全てマージした物(217,891点):参考 国土地理院PatchJGD相当の地殻変動補正を実装する(1)。実際の座標変換は、地震発生順に座標変換を順次適用して計算します。
  • jgdMerge2024.par: 国土地理院提供の2012年から2024年までの地震による地殻変動パラメータファイルを全てマージした物
  • TKY2JGD.par: 国土地理院提供(392,323点)

技術資料

  • 国土地理院「測地成果2024」: https://www.gsi.go.jp/sokuchikijun/jgd2024.html
  • セミ・ダイナミック補正: https://www.gsi.go.jp/sokuchikijun/semidyna.html
  • PatchJGD: https://www.gsi.go.jp/sokuchikijun/patchjgd.html

作成日: 2025年11月6日
バージョン: 2.0(修正版)
著者: GeoDive開発チーム
修正内容: RTK補正済みWGS84 = JGD2011に基づく正しい変換経路に修正1/Mrg1 25.11.5以降
作成者: GeoDive開発チーム

関連投稿


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP