
TKY2JGD.parの中身を読む — パラメータファイルの構造
⚠ 本記事は、「グリッド補間の実装 — バイリニア内挿の中身」で扱った「補間計算」の前段にある、元データそのもの(.parファイル)の中身を読み解く記事です。前回は「格子点の値から任意の1点を補間する」計算に焦点を当てましたが、今回は「その格子点の値は、どういうファイル形式で配布されているか」を掘り下げます。
.parファイルの入手と種類
国土地理院は、TKY2JGD(旧日本測地系→JGD2000)をはじめとする測地系変換・地殻変動補正のパラメータを、独自形式の.parファイルとしてWebサイトで配布しています。同じ.parという拡張子でも、中身の対象は複数あります。
| ファイル | 対象の変換 |
|---|---|
| TKY2JGD.par | 旧日本測地系(Tokyo Datum)→JGD2000 |
| PatchJGD(地震別) | 地震による地殻変動の補正(セミダイナミック補正とは別の、地震時の一時的な補正) |
| SemiDynaEXE | 定常的な地殻変動を年ごとに補正するパラメータ |
| POS2JGD | 定常時地殻変動補正(プレート運動による恒常的な変動) |
これらはいずれも「格子点+補正値」という同じ考え方でできていますが、対象とする現象(地震か、恒常的な地殻変動か)が違うため、更新頻度やファイルの世代管理の仕方が異なります。
フォーマット解剖 — ヘッダとデータ行
.parファイルはプレーンテキストで、大まかに次の構造をしています。
- ヘッダ行:ファイルの先頭数行に、バージョン情報や列の説明が書かれています。TKY2JGD.parでは、例えば「
JGD2000-TokyoDatum Ver.2.1.2 MeshCode dB(sec) dL(sec)」のような1行が入り、続く各列が「メッシュコード」「緯度方向の補正量dB(秒)」「経度方向の補正量dL(秒)」であることを示します。 - データ行:ヘッダ以降は、1行につき1つの格子点のデータが並びます。列はスペース区切りで、たとえば「
46303593 12.79544 -8.13819」のように、メッシュコード・dB(秒)・dL(秒)が並ぶ形式です。
dB・dLは「度」ではなく「秒(arcsecond)」単位で格納されている点に注意が必要です。1秒は約30m弱(緯度方向)に相当するため、桁を読み違えると補正量が3600倍狂うことになります。

TKY2JGDの補正量は全国で概ね30万〜40万点規模の格子データとして配布されており、緯度方向30秒・経度方向45秒間隔(おおむね1km四方に相当)のメッシュで格納されています。上図はその補正量を全国メッシュで可視化したものです。
メッシュコード→緯度経度の計算
メッシュコードは、地域メッシュ統計(JIS X0410)の考え方を踏襲した数値コードで、1次メッシュ(約80km四方)・2次メッシュ(約10km四方)・3次メッシュ(約1km四方)と桁を追うごとに細分化される階層構造になっています。TKY2JGDの格子は3次メッシュ相当の分解能で配布されており、コードから南西角の緯度経度を逆算し、そこに緯度30秒・経度45秒を足すことでメッシュの4隅(北東角など)を求められます。
ここで注意したいのは、メッシュコードが指すのは「そのメッシュ(四角形)全体」ではなく「南西角の1点」という点です。バイリニア補間で4隅の値を使う際には、対象地点を挟む4つのメッシュコード(自分自身と、北・東・北東隣接のメッシュ)を正しく特定する必要があります。
パーサ実装の注意
自前で.parファイルを読み込むパーサを書く場合、次のような点が実務上のハマりどころになります。
- 欠損・非対象領域:海域や国外など、そもそも変換パラメータが定義されていないメッシュは、ファイルに行自体が存在しません。「対象データが見つからない=ファイル異常」ではなく「その地点は対象範囲外」という正常系として扱う必要があります。
- ソート順の前提:ファイル内のメッシュコードが必ずしも数値順に並んでいるとは限らないため、高速な検索(二分探索など)を行うには、読み込み時に自前でインデックス化(メッシュコードをキーにしたハッシュマップ化など)しておくのが安全です。
- メモリと読み込み方式:全国規模のデータは行数が多いため、アプリ内蔵データとして持つ場合は、テキストのまま持つよりも、あらかじめバイナリ化・圧縮した独自フォーマットに変換して同梱する方が起動時間・メモリ効率の面で有利です。
- 文字コード・改行コード:配布元のファイルはWindows環境を前提にした改行コード(CRLF)で作られていることが多く、他OS環境での読み込み時には改行コードの正規化が必要です。
ファイル種別ごとの違い早見表
| 種別 | 主な違い |
|---|---|
| TKY2JGD.par | 全国1セットの静的なパラメータ(旧測地系分の恒久的なズレ) |
| PatchJGD(地震別) | 地震ごとに個別ファイルが追加され、複数の地震の影響域が重なる地点では複数ファイルの補正を重ね合わせて扱う必要がある |
| SemiDynaEXE / POS2JGD | 年次・数か月おきに新しいバージョンが公開され、経年での変化を追跡できる |
いずれも「メッシュコード+補正値」という骨格は共通していますが、SemiDynaEXE・POS2JGDは新しいバージョンが出るたびに全国データを丸ごと差し替える運用になっており、GeoCoreJP側でも年ごとのパラメータ更新に追随する仕組みが必要になります。
まとめ
.parファイルはヘッダ数行+「メッシュコード dB(秒) dL(秒)」形式のデータ行というシンプルなテキスト構造- メッシュコードは「南西角の1点」を指し、対象地点を囲む4隅のコードを正しく特定する必要がある
- 実装では、欠損メッシュの扱い・検索用インデックスの構築・文字コードや改行コードの正規化が実務上のポイントになる
- TKY2JGD・PatchJGD・SemiDynaEXE・POS2JGDは同じファイル構造の考え方を共有しつつ、対象現象と更新頻度が異なる
関連記事
- グリッド補間の実装 — バイリニア内挿の中身(GeoConverterPro)
- ジオイドモデルの内挿計算 — 格子からNを求める(GeoConverterPro)
- セミダイナミック補正と定常時地殻変動補正の経年変化を可視化する(GeoConverterPro)
- 測地系を変換する2つの流儀 — パラメータ変換とグリッド変換をやさしく学ぶ(GeoPrism JP)
- C#で測地計算の単体テストを書く — 検証値ドリブン開発(GeoDiveExa)
出典
- TKY2JGD入出力ファイル形式|国土地理院
- TKY2JGD for Windowsダウンロード|国土地理院
- メッシュコード(地域メッシュ)の階層構造は、JIS X0410(地域メッシュ統計に係る地域区画)の一般的な定義に基づく
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
アプリを入手(App Store):GeoConverterPro(座標変換) | GeoPrism JP(測地系の可視化・学習)
コメントを残す