PLATEAUの3D都市モデルを地面に接地させる方法

### 対象者
Cesium JSやRe:Earth等のWeb GIS でPLATEAUの3D都市モデル（3D Tiles）を表示する際に、地面とPLATEAUデータが接地しない問題に直面した方向けの記事となっています。

### PLATEAUのデータが浮く理由

PLATEAUの3D都市モデルは東京湾平均海面を基準とする標高に基づいてデータが作成されています。そのため、Web GISでPLATEUデータを扱う場合は、地形（Terrain）も3D化する必要があります。 下図のように地形を2Dの状態にしたままにすると建物が浮いて表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/2933c125-5984-7fa9-a47d-858934098cd5.png)


### 地形を3D化しても建物とうまく接地しない
Cesiumが提供するCesium World Terrainを利用（Re:EarthでTerrainを有効化した場合デフォルトではCesium World Terrainが利用されます）しているにもかかわらず、建物が地面にめり込んでいる、うまく接地しない場合があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/e8d7f8e3-c5e8-7dcd-c3b5-aeab65fd7c13.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/bdfccfc6-1e3f-3375-d246-2fed1ba411b2.png)

これは、Cesium World Terrainの精度が起因となり発生します。
Cesium公式サイトには地域毎の地形データの精度が記載されています。Cesium World Terrainが提供する日本の地域における地形データの分解能が粗いために、うまくPLATEAUのデータとマッチしないということが発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/e16255f5-4490-3cb5-3993-fcc5d1be8575.png)

より高精度な地形データを利用することで、この問題を解消することができます。
PLATEAUでは国土地理院が整備した[基盤地図情報数値標高モデル5mメッシュ](https://fgd.gsi.go.jp/download/ref_dem.html)に基づいて、作成された地形データ（[PLATEAU-Terrain](https://github.com/Project-PLATEAU/plateau-streaming-tutorial/blob/main/terrain/plateau-terrain-streaming.md)）が提供されています。PLATEAU-Terrainを地形データとして用いることで、Cesium World Terrainより精度の高い地形データを利用してPLATEAUの3D都市モデルを表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/d0d46a6c-e820-9ede-718b-276586fb4cb5.png)

### PLATEAU-Terrainを利用する方法
PLATEAUからPLATEAU-Terrainを利用するための、アクセストークンおよびアセットIDが提供されています。これをCesium JSもしくはRe:Earthに入力することで、PLATEAU-Terrainを有効化することができます。アクセストークンとアセットIDは以下のURLから確認いただけます。（試験験運用であるため、提供期間やサービスレベルについては保証されていないとのこと）

https://github.com/Project-PLATEAU/plateau-streaming-tutorial/blob/main/terrain/plateau-terrain-streaming.md#21-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8F%8A%E3%81%B3%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88id

加えて、Cesium公式からもJapan Regional Terrainとして、日本の高精度の地形データが配信されています。ご自身でCesium ionにサインインいただき、Japan Regional Terrainをアセットに追加することでも利用することができます。

https://cesium.com/blog/2024/10/24/updates-to-japan-3d-content/

PLATEAU-TerrainのreadmeにCesium JSの実装例は記述されていますので、本記事ではRe:EarthにおけるPLATEAU-Terrainの有効化の方法を解説します。（今後、Re:EarthのアップデートによりUIが変更される場合があります）。

Re:Earth編集画面からScene > Terrain を選択し、"Terrain type"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/cca952b1-ed5b-cb7e-7793-8cbb78b2a071.png)


"Terrain type"を"Cesium ion"に変更します。すると下記のようなUIに変わるので、PLATEAU-Terrainのreadmeに記載されているアセットIDとアクセストークンを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/19001816-aec7-6a5e-bd9d-461007caa2fa.png)

PLATEAU-Terrainを有効化することで、建物が接地されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467847/ed895508-ae17-ae2f-20c5-df33c340feb3.png)


### 参考資料:
国土交通省 「TOPIC 3｜3D都市モデルデータの基本[4/4]｜CityGMLの座標・高さとデータ変換」: https://www.mlit.go.jp/plateau/learning/tpc03-4/

Cesium GS, Inc「Cesium World Terrain」: https://cesium.com/platform/cesium-ion/content/cesium-world-terrain/