概要
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の位置ずれ補正
使用する補正パラメータファイル
- TKY2JGD.par(392,323点)
- Tokyo測地系 ⇔ JGD2000 の変換補正
- 日本測地系の歪みを補正
- 2003年〜2011年までの.par
- JGD2000 ⇔ JGD2011 の地震による地殻変動表したファイル
- 2011年東日本大震災などの地殻変動を補正
- 2012年〜2024年までの.par
- 現在の(GPSなどの測定)位置 ⇔ JGD2011(JGD2024) の地震による地殻変動表したファイル
- 2012年以後の熊本地震などの地殻変動を補正
- 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
変換における注意点
- JGD2011→JGD2000: 2011年地震の地殻変動を「戻す=逆変換」処理(東北で最大5m)
- 補正の方向: 地域によって異なる(プレート運動の方向に依存)
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);
}
まとめ
実装のポイント
- RTK補正済みWGS84 = JGD2011: これが最も重要な前提
- JGD2000への変換: PatchJGD逆補正が必要(2003~2011年地震の影響を戻す)
- Tokyoへの変換: 2段階変換(JGD2011→JGD2000→Tokyo)
- JGD2024への変換: ジオイド2024を適用して標高を変更する
- parファイルの活用: 高精度な補正パラメータ(国土地理院提供)
測地系の使い分け
| 測地系 | 用途 | 精度 |
|---|---|---|
| JGD2024 | 現在の高精度測量 | 最高(2024年基準) |
| JGD2011 | RTK-GNSS測位 | 高(2011年基準) |
| JGD2000 | 過去データとの整合性 | 中(2000年基準) |
| Tokyo | 古い地図・データとの照合 | 低(1918年基準) |
今後の展開
- 時系列補正: 任意の日付での座標値計算
- 逆変換の精度向上: 反復計算による高精度化
- 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開発チーム
関連投稿
- 国土地理院PatchJGD相当の地殻変動補正を実装する(1) 変換プログラム
- 国土地理院PatchJGD相当の地殻変動補正を実装する(2) 可視化
- 国土地理院PatchJGD相当の地殻変動補正を実装する(3) クラスター分割可視化
- 国土地理院Tky2Jgd補正相当の地殻変動補正を実装する(1) 変換プログラム
- 国土地理院Tky2Jgd補正相当の地殻変動補正を実装する(2) 可視化
- JGD2011とJGD2024の違い – GeoDiveExaのJGD2024対応(1) 説明
- JGD2011とJGD2024の違い – GeoDiveExaのJGD2024対応(2) 変換プログラム
- JGD2011とJGD2024の違い – GeoDiveExaのJGD2024対応(3) 可視化
- 🗾 日本の測地系の変遷と実務対応:TOKYOからJGD2024Bまで
- JGD2000 ~JGD2024までの地震変動パラメータの可視化

コメントを残す