
LandXMLに測地系は書いてある? — J-LandXMLのCoordinateSystemの読み方と、高さがずれる理由
書ける場所はあります。ただし必須ではありません。 国土交通省の3次元設計データ交換標準(J-LandXML)で座標系を書く場所は CoordinateSystem 要素ですが、この要素は仕様上「出現回数 0 又は 1」——つまり丸ごと無くても仕様違反にならないのです。しかも書けるのは測地系名・系番号・鉛直基準名といった文字列だけで、EPSGコードの欄はありません。DXFに測地系が書かれていない問題と、構造はよく似ています。
LandXMLとJ-LandXMLの関係
LandXMLは土木・測量分野のデータ交換用のXMLフォーマットです。日本ではこれをそのまま使うのではなく、国土交通省が国内向けにサブセット化・拡張した「LandXML1.2に準じた3次元設計データ交換標準(案)」(略称 J-LandXML)が使われています。
本記事で参照するのは Ver.1.4(令和3年3月・国土交通省国土技術政策総合研究所) です。バージョンは1.3・1.6なども公開されているので、手元のデータがどの版に準じているかは、後述の「適用基準」で確認できます。
J-LandXMLは「本書で記載していないLandXML1.2の要素については、それらの要素の使用を制限するものではない」としています。つまり標準が定めていない属性が書かれていることもある、というのが前提です。
座標系はここに書かれている:CoordinateSystem
J-LandXML Ver.1.4 における記入例は次のとおりです。
<CoordinateSystem
name="CRS1"
horizontalDatum="JGD2000"
verticalDatum="O.P"
horizontalCoordinateSystemName="9(X,Y)"
desc="第9系">
<Feature>
<Property label="differTP" value="-1.3000"/>
</Feature>
</CoordinateSystem>
読み方は4つです。
| 属性 | 意味 | 書かれる値 |
|---|---|---|
horizontalDatum |
測地原子(水平の測地系) | JGD2000 / JGD2011 / TD(旧日本測地系) |
horizontalCoordinateSystemName |
水平座標系 | 1(X,Y)〜19(X,Y)(平面直角座標系の系番号) |
verticalDatum |
鉛直原子 | T.P や主要河川の基準名(O.P A.P など) |
desc |
注記 | 「第9系」のような人間向けの説明 |
系番号は算用数字+(X,Y) という独特の書き方です。第9系なら 9(X,Y)。標準の対応表では、1(X,Y) が平面直角座標系第I系、19(X,Y) が第XIX系まで並んでいます。
上の例が意味していること
サンプルの horizontalDatum="JGD2000" verticalDatum="O.P" horizontalCoordinateSystemName="9(X,Y)" は、「日本測地系2000の平面直角座標系第9系、高さは大阪湾最低潮位(O.P.)基準」という宣言です。淀川水系の設計データを想定した例、ということになります。
落とし穴1:CoordinateSystem は必須ではない
これが最大の問題です。Ver.1.4 の仕様表で CoordinateSystem の出現回数は 「0 又は 1」。属性側にも「必須」の表記がありません。
つまり、座標系がまったく書かれていないJ-LandXMLファイルが、仕様に適合したまま存在し得ます。 受け取った側は、数値の桁と符号から系番号を推測するしかなくなります。
実務での対処は、DXFのときと同じです。
- 受け取ったらまず
CoordinateSystemの有無を確認する(テキストエディタで開いてCoordinateSystemを検索するだけで分かります) - 無ければ、既知点を1点添えてもらうか、系番号と測地系を書面で確認する
- X座標が数十万m級の負の値かどうかなど、値の範囲から系のあたりを付ける(あくまで補助)
落とし穴2:EPSGコードの欄がない
Ver.1.4 の CoordinateSystem に規定されている属性は上記の4つ(+name)だけで、epsgCode・geoidName・ellipsoidName といった属性は仕様書に登場しません。
そのため、GISへ取り込むときのEPSGコードは「測地系名+系番号」から自分で決めることになります。
| 測地系の記載 | 平面直角座標系のEPSG |
|---|---|
TD(旧日本測地系) |
Tokyo Datum 系のコード(第I〜XIX系) |
JGD2000 |
2443〜2461(第I系=2443) |
JGD2011 |
6669〜6687(第I系=6669) |
JGD2024のEPSG登録状況は別記事にまとめてあります。測地系名を読み飛ばしてEPSGを固定してしまうと、数百m単位で平行移動した成果になります。 TD と JGD2000 の取り違えがいちばん危険です。
LandXML1.2のスキーマ側には
epsgCodeにあたる属性が存在するため、ソフトによってはそれを書き出していることがあります。あれば有力な手がかりですが、J-LandXML準拠のリーダが読んでくれる保証はありません。
落とし穴3:高さの基準が河川基準面かもしれない
verticalDatum は仕様書の説明が「主要河川の基準名」となっており、T.P.(東京湾中等潮位)以外の基準面が入ることを最初から想定しています。
そして、T.P.との差は CoordinateSystem の子要素として書かれます。
<Feature>
<Property label="differTP" value="-1.3000"/>
</Feature>
differTP は「T.P.との標高差」です。Ver.1.4 の対応表には次の基準面が並んでいます。
| 河川名 | 基準名 | T.P.との標高差(m) |
|---|---|---|
| 東京湾中等潮位 | T.P | — |
| 北上川 | K.P | -0.8745 |
| 鳴瀬川 | S.P | -0.0873 |
| 利根川 | Y.P | -0.8402 |
| 荒川・中川・多摩川 | A.P | -1.1344 |
| 淀川 | O.P | -1.3000 |
| 吉野川 | A.P | -0.8333 |
| 渡川 | T.P.W | +0.113 |
| 琵琶湖 | B.S.L | +84.371 |
吉野川の「A.P」と荒川水系の「A.P」は別物である点に注意してください。基準名の文字列だけを見て変換すると、約30cmずれます。verticalDatum と differTP は必ずセットで読む、というのが安全な運用です。
なお、Ver.1.4 には「Z値の基準面はこれとする」という独立した規定文はありません。高さの意味は verticalDatum と differTP の宣言に完全に委ねられている、ということです。標高とジオイド高・楕円体高の関係についても仕様書は触れていません。
落とし穴4:座標値は「X座標、Y座標、標高」の順
CgPoint などの座標を持つ要素には、仕様書に同じ定型文が繰り返し書かれています。
座標値を X 座標、Y 座標、標高の順番にスペース区切りで入力する/標高は省略可能
<CgPoint name="T-5">-134713.643982 22106.715939</CgPoint>
日本の平面直角座標系はX=北、Y=東なので、この並びは「北, 東, 高さ」です。LandXMLが生まれた欧米圏の慣習(Y=northing)とは逆になります。海外製CADのインポータを通したときに点群が対角へ飛ぶのは、たいていここが原因です。
しかも標高は省略可能なので、2値しか入っていない座標列も正当です。3値前提でパースすると落ちます。
落とし穴5:角度の decimal dd.mm.ss は十進度ではない
座標系そのものの話ではありませんが、同じファイル内で事故が起きやすいので触れておきます。Units/Metric の angularUnit には radians / grads / decimal degrees / decimal dd.mm.ss が選べます。
このうち decimal dd.mm.ss は、仕様書の注記どおり 「度と分の間をピリオドで区切り、分と秒は区切らずに続けて記載する」 書き方です。
例.10°25′35″の場合 → 10.2535
10.2535 を十進度として読むと 10.2535°(=10°15′13″)になり、約1分22秒=実距離で2km以上ずれます。度分秒と十進度の相互変換は別記事にまとめていますが、LandXMLではそもそも表記が十進度に見えるぶん、気づきにくいのが厄介です。
受け取ったJ-LandXMLの点検リスト
テキストエディタで開いて、上から順に確認するだけで大半の事故は防げます。
- 適用基準:
applicationCriterionのvalue(例MlitLandXmlVer.1.4)で準拠バージョンを確認 CoordinateSystemの有無:無ければ発注者・作成者に確認するhorizontalDatum:TD/JGD2000/JGD2011のどれか。TDなら旧日本測地系からの変換が要るhorizontalCoordinateSystemName:n(X,Y)の n が想定の系番号かverticalDatumとdifferTP:T.P.以外なら、T.P.系の他データと合わせる前に補正するangularUnit:decimal dd.mm.ssなら角度値の読み方を切り替える- 座標値の並び:X(北)が先。CAD/GIS側の期待と合っているか

GeoConverter Pro はLandXMLを直接読むアプリではありませんが、J-LandXMLから抜き出した座標をCSVにして、系番号・測地系の当たりを付ける用途には使えます。CoordinateSystem が空のデータで既知点1点との照合をするとき、旧日本測地系・JGD2000・JGD2011・JGD2024を総当たりで比較できるのは実用的です。
まとめ
- J-LandXMLの座標系は
CoordinateSystem要素。ただし出現回数「0又は1」=省略できる - 書けるのは
horizontalDatum(JGD2000/JGD2011/TD)・horizontalCoordinateSystemName(9(X,Y)形式)・verticalDatum・desc。EPSGコードの欄はない - 高さは河川基準面のことがある。
verticalDatumとdifferTP(T.P.との標高差)は必ずセットで読む - 座標値はX(北)→Y(東)→標高の順。標高は省略可
decimal dd.mm.ssは十進度ではない(10.2535= 10°25′35″)
出典
- 国土交通省国土技術政策総合研究所「LandXML1.2に準じた3次元設計データ交換標準(案)Ver.1.4」(令和3年3月) https://www.mlit.go.jp/tec/content/001395568.pdf
- 同 Ver.1.3(平成31年3月) https://www.nilim.go.jp/lab/qbg/researchfields/pdf/h31_basedLandXML1.2.v1.3.pdf
- 同 運用ガイドライン(案)Ver.1.3 https://www.nilim.go.jp/lab/qbg/researchfields/pdf/h31_basedLandXML1.2.v1.3_guidline.pdf
- 国土地理院「わかりやすい平面直角座標系」 https://www.gsi.go.jp/sokuchikijun/jpc.html
本記事の引用・表はVer.1.4(令和3年3月)の記載に基づく2026年8月時点の内容です。案件で適用される版・運用ガイドラインは発注者の指定に従ってください。
次に確認する
- CADのDXFに測地系情報が入っていない理由と対処を確認する — 本記事と同じ「座標系が書かれていない」問題の図面版です
- T.P.・A.P.・O.P.・Y.P.をどうそろえるかを確認する —
verticalDatumとdifferTPの実務側の手順です - 平面直角座標のXとYがどちらが北かを確認する — 座標値の並びで点群が対角に飛ぶ話です
- 測地系が分からないデータをズレ量から見分ける手順を確認する —
CoordinateSystemが空だったときの最後の手段です - 平面直角座標系19系がどう分けられているかを図で確認する(GeoPrism JP) —
9(X,Y)がどの範囲を指すのかが図で分かります - 書籍でまとめて学ぶ: 『日本の測地系Q&A』第13章「座標データの落とし穴」(Kindle Unlimited対応)
入門から通しで読むなら: 『日本の測地系がわかる本』 — 旧日本測地系から JGD2024 まで、座標がズレる理由と実務での扱いを1冊にまとめました(Kindle Unlimited 対応)
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
コメントを残す