
PLATEAUの3D都市モデルはどの座標系? — CityGMLに書かれるEPSG:6697と、緯度・経度・標高という並び順
答えは EPSG:6697 です。 「日本測地系2011における経緯度座標系」と「東京湾平均海面を基準とする標高」を組み合わせた複合座標参照系で、高さを持たないデータでは EPSG:6668 が使われます。そして座標値の並びは 緯度・経度・高さの順。GeoJSONなどに慣れているほど間違えやすい点なので、ここを最初に押さえておくと事故が減ります。
どこに書いてあるのか
CityGMLはXMLです。座標参照系は、ファイル先頭付近の <gml:Envelope> の srsName 属性に書かれています。
<gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/6697" srsDimension="3">
EPSGコードを裸で書くのではなく、OGCのURI形式で書かれているのが特徴です。パーサを自作するときは、末尾の数値を取り出す前提にしておくと扱いやすくなります。
| EPSGコード | 中身 |
|---|---|
| 6697 | 日本測地系2011における経緯度座標系+東京湾平均海面を基準とする標高の複合座標参照系 |
| 6668 | 日本測地系2011における経緯度座標系(高さの定義を持たない) |
土地利用や都市計画区域のように高さを必要としない地物では、高さの値が0に設定されています。「標高0mの土地」ではなく「高さを使っていない」という意味なので、そのまま地形に載せると地面に埋まります。
落とし穴その1:座標は「緯度・経度・高さ」の順
頂点座標は <gml:posList> に並びます。
<gml:posList>
43.061285701747266 141.35419378529105 19.763
43.06128569987977 141.35419377672426 19.763
</gml:posList>
先頭が 緯度、次が 経度、最後が 標高 です。GeoJSONやKMLは経度・緯度の順なので、そのまま流し込むと座標が北海道から遠く外れた場所へ飛びます。しかも数値としては両方とも「それらしい範囲」に見えるため、地図に載せるまで気づけません。
この軸順序の問題はCityGMLに限りません。形式ごとの規則は緯度と経度、どちらを先に書く?にまとめてあります。
落とし穴その2:高さは「標高」であって楕円体高ではない
19.763 のような高さの値は、東京湾平均海面を基準とする標高です。GNSS受信機やスマートフォンが返す高さは、多くの場合そのままでは楕円体高なので、基準面が違います。
標高 H = 楕円体高 h − ジオイド高 N
日本国内ではジオイド高が数十m規模になる地域もあり、この引き算を忘れると建物が空中に浮くか地面に沈みます。手順は楕円体高から標高へ — ジオイド2024で「高さ」を正しく変換するで扱っています。

なお水平位置については、WGS84と日本測地系2011は実用上ほぼ重なるため、スマートフォンで取得した緯度経度をそのまま重ねられます(WGS84とJGD2024は「同じ座標」なのか)。ずれるのは高さのほうだ、と覚えておくと実務で迷いません。
メートルで扱いたいとき:平面直角座標系へ
経緯度のままでは、幅も面積も体積も定規で測れません。3Dソフトやゲームエンジンに持っていくなら、メートル単位の平面直角座標系へ投影します。JGD2011の平面直角座標系は19系あり、EPSGコードは 6669(1系)〜6687(19系) に割り当てられています。関東圏なら9系(EPSG:6677)です。

系の選び方は平面直角座標系1〜19系の早見表を参照してください。投影したあとに引っかかりやすいのは、次の3点です。
① 軸の向きが3Dソフトの常識と違う
平面直角座標系は X軸が南北(真北が正)、Y軸が東西(真東が正)です。北を上、東を右にした地図の感覚(X=東、Y=北)とは入れ替わっているため、そのまま3Dソフトへ渡すと回転・反転した向きで表示されます。詳しくは平面直角座標のXとYはどっちが北?にまとめました。
② 原点が遠い
系の原点は、その地域の代表点であって、対象物のそばとは限りません。9系の原点は東京都ではなく千葉県内にあります。3Dソフトへインポートしたときに「何も表示されない」ように見えるのは、カメラが原点にあり、モデルがそこから何万メートルも離れているためです。モデル側の原点をずらすか、カメラを移動させれば見えます。
③ 単精度では桁が足りない
平面直角座標の値は、数万〜十数万メートルの大きさになります。単精度浮動小数点(float)は有効桁が約7桁しかないため、メートル未満の情報が丸め落ちます。倍精度(double)で計算するのが原則です。座標値と丸めの関係はdoubleの精度でmmは守れるか — 座標計算と浮動小数点でも扱っています。
他のデータ形式と並べてみる
「座標系がどこに書かれているか」は、形式ごとにまったく違います。
| 形式 | 座標系の在りか | 高さの基準 |
|---|---|---|
| CityGML(PLATEAU) | <gml:Envelope> の srsName(EPSG:6697/6668) |
標高(東京湾平均海面) |
| Shapefile | 別ファイル .prj にWKTで記述 |
定義に依存 |
| GeoPackage | データベース内のテーブルに記述 | 定義に依存 |
| LAS(点群) | ヘッダのVLRにGeoTIFFキーまたはWKT | 定義に依存 |
| GeoJSON・KML・GPX | 記述しない(WGS84固定) | 楕円体高または未定義 |
| DXF | 記述する場所がない | — |
CityGMLは「ファイルの中に、URI形式で明示されている」タイプです。書いてある場所さえ分かれば迷わない——この点では扱いやすい形式だと言えます。
まとめ
- PLATEAUのCityGMLは EPSG:6697(高さを使わないものは 6668)
- 座標の並びは 緯度・経度・標高。経度・緯度の順で読むと位置が飛ぶ
- 高さは 標高。GNSSの楕円体高とは基準面が違うので、ジオイド高を引く
- メートルで扱うなら 平面直角座標系(EPSG:6669〜6687) へ。軸の向き・原点の遠さ・倍精度に注意
出典
- 国土交通省 PLATEAU「TOPIC 3|3D都市モデルデータの基本[4/4]|CityGMLの座標・高さとデータ変換」 https://www.mlit.go.jp/plateau/learning/tpc03-4/
- 国土交通省 PLATEAU「3D都市モデル標準製品仕様書」 https://www.mlit.go.jp/plateau/libraries/technical-reports/
- 国土地理院「平面直角座標系(平成十四年国土交通省告示第九号)」 https://www.gsi.go.jp/LAW/heimencho.html
- 国土地理院「わかりやすい平面直角座標系」 https://www.gsi.go.jp/sokuchikijun/jpc.html
記載は2026年8月時点の公開資料にもとづく整理です。データの版や地物の種類によって仕様が異なる場合があります。実データを扱う前に、必ず対象データの標準製品仕様書と
srsNameの実値をご確認ください。
次に確認する
- 形式ごとに違う緯度・経度の書き順を確認する — CityGMLだけの話ではないことが分かります
- 楕円体高から標高へ変換する手順を確認する — 建物が浮く・沈む原因をここで断てます
- 自分の対象地域が何系かを早見表で確認する — EPSG:6669〜6687のどれを選ぶかの判断材料です
- 平面直角座標系19系のしくみを図で確認する(GeoPrism JP) — なぜ19に分かれているのかを、地図で押さえられます
- 書籍でまとめて学ぶ: 『日本の測地系Q&A』第13章「座標データの落とし穴」(Kindle Unlimited対応)
入門から通しで読むなら: 『日本の測地系がわかる本』 — 旧日本測地系から JGD2024 まで、座標がズレる理由と実務での扱いを1冊にまとめました(Kindle Unlimited 対応)
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
コメントを残す