気象庁XMLの震源の緯度経度、測地系はどれ? — datum属性が「日本測地系」のときだけ現れる仕様と、+36.4+140.9-40000/ の読み方

,

気象庁XMLの震源の緯度経度、測地系はどれ? — datum属性が「日本測地系」のときだけ現れる仕様と、+36.4+140.9-40000/ の読み方

気象庁XMLの震源の緯度経度、測地系はどれ? — datum属性が「日本測地系」のときだけ現れる仕様と、+36.4+140.9-40000/ の読み方

属性が無ければ世界測地系です。

気象庁防災情報XMLの座標要素には datum という属性がありますが、辞書の定義は「測地系を示す(日本測地系の場合のみ表現する)」。スキーマ上、この属性が取れる値は「日本測地系」の1つだけです。世界測地系だと書く場所がそもそも存在しない。では、その属性を持たない座標をどう扱えばいいのでしょうか。


まず実物を見る

2026年9月6日3時00分ごろの茨城県沖の地震について発表された「震源・震度に関する情報」(電文種別 VXSE53)の、震源の座標です。

<Hypocenter>
  <Area>
    <Name>茨城県沖</Name>
    <Code type="震央地名">471</Code>
    <jmx_eb:Coordinate description="北緯36.4度 東経140.9度 深さ 40km">+36.4+140.9-40000/</jmx_eb:Coordinate>
  </Area>
</Hypocenter>

この電文に datum 属性はありません(電文全体を検索しても datum の文字列は1つも出てきませんでした)。

そして、値のほうには測地系を示す情報がまったく含まれていません。+36.4+140.9-40000/ という文字列だけです。EPSGコードもCRSのURIも付いていない。基準は、属性が「無いこと」で表現されています。


+36.4+140.9-40000/ をどう読むか

この書式はISO 6709です。辞書の type.Coordinate の説明にそう書かれています。

(一般)地理空間情報(値はISO 6709の書式で記述する。ただし、例外として表1.1の備考欄に示す一部情報では、ISO6709で規定されている緯度、経度の整数部分の先頭の0を省略する場合がある。)

区切り文字はありません。符号そのものが区切りです。

部分 意味
+36.4 緯度 北緯36.4度(南緯なら -
+140.9 経度 東経140.9度(西経なら -
-40000 高さ −40,000m。つまり深さ40km
/ 終端記号

深さが「高さのマイナス」として、しかもメートル単位で入っているのが要注意です。緯度経度は度、深さはメートル。同じ文字列の中で単位が変わります。

もうひとつ、辞書が但し書きしている「整数部分の先頭の0を省略する場合がある」。ISO 6709の本来の書き方では経度の整数部は3桁(+140.9 なら問題ないが、たとえば東経40.9度は +040.9)ですが、一部の情報ではこの先頭0が落ちることがある、と気象庁自身が明記しています。桁数固定でスライスするパーサは壊れます。符号を目印に切り出すのが安全です。


datum属性の定義

気象庁が公開している辞書一式(令和8年1月29日一部更新)の、type.Coordinate の属性欄です。

属性 名称 説明
type 分類 地理空間情報の分類を示す
datum 測地系 測地系を示す(日本測地系の場合のみ表現する)
condition 状態 震源がごく浅い場合などで例外的な状態を示す
description 文字列表現 文字列で表示する場合の表記法を記述する

そして datum の値として辞書に載っているのは1つだけです。

"日本測地系" ── 緯経度が”日本測地系”であることを示す。

XMLスキーマ(xsd、令和6年10月31日一部更新)の実装も同じです。

<xs:complexType name="type.Coordinate">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="type" type="xs:string" use="optional"/>
      <xs:attribute name="datum" type="jmx_eb:enum.type.Coordinate.datum.attr" use="optional"/>
      <xs:attribute name="condition" type="xs:string" use="optional"/>
      <xs:attribute name="description" type="xs:string" use="optional"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:simpleType name="enum.type.Coordinate.datum.attr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="日本測地系"/>
  </xs:restriction>
</xs:simpleType>

use="optional" で、列挙値は「日本測地系」の1個だけ"世界測地系""JGD2011""WGS84" も、スキーマ上は書けません。

つまりこの仕様は、「例外のときだけ札を立てる」という設計です。既定の基準は無印で表され、そこから外れるものにだけ属性が付く。


「書かれていない基準」の、3つ目の型

このシリーズで公的データの座標系を追ってきて、基準の書かれ方には型があることが見えてきました。

読み手のすべきこと
仕様書に明記 国土数値情報(製品仕様書に「JGD 2011 / (B, L)」) 読むだけ
注記1行だけ e-Statの境界データ 注記を探す
例外にだけ札 気象庁防災情報XML(datum属性) 属性が無いことの意味を仕様書で確認する
どこにも書かれていない アメダスの地点表 データ側から推定するしかない

3つ目が厄介なのは、属性が無い状態が「不明」ではなく「既定値」を意味しているところです。ぱっと見は「測地系の記載なし」に見えるので、4つ目(不明)と区別がつきません。辞書の1行を読んで初めて、無印に意味があると分かります。


もし日本測地系だったら、どれだけずれるか

datum="日本測地系" が付いた座標を、世界測地系の地図にそのまま載せるとどうなるか。日本測地系から世界測地系への変換量(TKY2JGD)は、日本国内でおおむね400m前後、最大では約612mに達します。

TKY2JGDによる測地系変換補正量のヒートマップ(最大19.83秒 ≒ 612.26m)

震源の緯度経度は小数第1位までしかないので、そもそも0.1度=約11kmの丸めが入っています。612mは、その丸めの中に埋もれる大きさです。震央地名を表示するだけなら実害は出にくい。けれども震源を他のデータと重ねたり、距離を計算したりする段になると、400〜600mは無視できません。

なお、datum="日本測地系" を実際に付けて発表される電文が現在あるかどうかは、本記事では確認できていません。属性が用意されている以上、過去の電文や特定の情報種別で使われている(あるいは使われていた)可能性はあります。パーサを書くなら、値が来た場合の分岐は残しておくのが安全です。


type属性を見ないと単位が分からない

もうひとつ、パースの実務で効く話。type 属性には、辞書上こういう値が並んでいます。

  • "震源位置(度)" / "震源位置(度分)"
  • "観測所の位置"
  • "中心位置(度)" / "中心位置(度分)"
  • "実況位置(度)" / "実況位置(度分)"
  • "予想位置 12時間後(度)" / "予想位置 12時間後(度分)"
  • "火山の位置" / "火口の位置"
  • "前線(度)" / "領域(度)"

「(度)」と「(度分)」が並んでいます。 同じ Coordinate 要素でも、情報の種類によって値が十進度なのか度分なのかが変わる、ということです。+3620+14050/ のような度分表記を十進度として読めば、緯度36.2度のつもりが36度20分=36.33度になり、十数km動きます。

type を見ずに値だけをパースするコードは、扱う電文の種類を広げた瞬間に壊れます。


description属性は表示用、値は機械用

description="北緯36.4度 東経140.9度 深さ 40km" は全角の日本語で、そのまま画面に出せる文字列です。辞書の説明も「文字列で表示する場合の表記法を記述する」。

つまり表示用です。ここから数値を正規表現で抜き出す実装を見かけますが、全角数字・全角スペース・単位の表記ゆれに引きずられます。座標として使うなら要素の値(ISO 6709の文字列)を読むべきです。


まとめ

  • 気象庁防災情報XMLの CoordinateISO 6709の文字列。符号が区切りで、末尾は /
  • 深さは「高さのマイナス」でメートル単位。緯度経度は度なので、1つの文字列で単位が変わる
  • datum 属性は「日本測地系の場合のみ表現する」。スキーマ上の列挙値も「日本測地系」1つだけ
  • したがって属性が無ければ日本測地系ではない。2026年9月6日発表の震源・震度情報を実際に確認したところ、datum は出現しなかった
  • type 属性に「(度)」と「(度分)」があるので、値の単位は type を見て決める
  • 整数部の先頭0が落ちる例外があると気象庁自身が明記している。桁数固定のパースは避ける

出典

  • 気象庁「気象庁防災情報XMLフォーマット情報提供ページ 技術資料」 https://xml.kishou.go.jp/tec_material.html
  • 同「辞書一式」(令和8年1月29日一部更新) https://xml.kishou.go.jp/jmaxml_20260129_dictionary.xlsx
  • 同「XMLスキーマファイル(xsd形式)一式」(令和6年10月31日一部更新) https://xml.kishou.go.jp/tec_material.html
  • 気象庁「高頻度(地震火山)フィード」 https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml

本記事の記述は2026年9月時点で公開されている資料と電文に基づきます。引用した属性定義は辞書一式およびXMLスキーマの本文を直接確認したものです。実物として挙げた電文は2026年9月6日発表の1件であり、すべての情報種別を確認したものではありませんdatum="日本測地系" が実際に使われる電文の有無、および気象庁がどの世界測地系(JGD2011等)を指しているかの明示的な記述は、本記事では見つけられませんでした。


次に確認する


入門から通しで読むなら: 『日本の測地系がわかる本』 — 旧日本測地系から JGD2024 まで、座標がズレる理由と実務での扱いを1冊にまとめました(Kindle Unlimited 対応)


開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。


お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。


コメントを残す

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

トップへ戻る