PLATEAUの3D都市モデルはどの座標系? — CityGMLに書かれるEPSG:6697と、緯度・経度・標高という並び順

,

PLATEAUの3D都市モデルはどの座標系? — CityGMLに書かれるEPSG:6697と、緯度・経度・標高という並び順

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)です。

平面直角座標系19系の区分地図

系の選び方は平面直角座標系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 の実値をご確認ください。


次に確認する


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


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


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


コメントを残す

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

トップへ戻る