PLATEAUの3D都市モデルでMIERUNEマステープの作り方

:::note info
これは [MIERUNE AdventCalendar 2022](https://qiita.com/advent-calendar/2022/mierune) 16日目の記事です。
昨日は @bordoray さんによる [PostGISでGPS dataに逆ジオコーディング方法評価](https://qiita.com/bordoray/items/c8f434757d59d1904675) でした。
:::

## 始めに
### MIERUNEマステープとは？
今年に作成した、MIERUNEの大好評ノベリティです。

https://twitter.com/MIERUNE_inc/status/1584729910727569409
### 作るきっかけ
[QGIS 3.26新機能②](https://www.mierune.co.jp/blog/posts/28pnzc7_rt5?lang=ja)の記事に記載があったように、標高断面図機能がQGIS3.26から正式機能として追加されました。また、QGISでの他の3Dビジュアルもどんどん進化しているので、それの良さを広げていきたいと思いました。

さっそく詳細な作り方を紹介していきます！

## 作業環境
- Windows10 64bit
- [QGIS](https://qgis.org/ja/site/forusers/download.html) 3.26
- [CloudCompare](https://www.danielgm.net/cc/) 2.13

## 事前に調査したこと
### [LODの概念](https://club.informatix.co.jp/?p=12646)
<img width="800" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/e12bbd76-433b-2705-d310-0c7d21b9bdfc.png">

### CityGMLをQGISに読み込む？
QGISで`.gml`ファイルも表示できますが、建物が四方形になり、断面も四方形です。つまり、建物の2D形状に高さ情報をかけあわせたLOD1です。
参考記事：[PLATEAUのCityGMLを鼻血出してQGISで表示する](https://qiita.com/Yfuruchin/items/aa3a847db26c7f378d6e)
<img width="600" alt="02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/a8b5caad-bd2e-fbbf-0a86-449082bb508c.png">

    
### `.obj`ファイルを利用する？
`.obj`ファイルならLOD2形式（LOD1に屋根形状を追加したもの）もありますので、いくつかの手法を検討しました。
- `.obj`ファイルはQGISに直接読み込めないようです。
- 実はQGISでポイントデータに`.obj`をスタイルとして表示するというやり方もあります。
   - 参考リンク：https://www.youtube.com/watch?v=rV0m_YN84Q0
- [QGIS 3.26新機能②](https://www.mierune.co.jp/blog/posts/28pnzc7_rt5?lang=ja)の記事にあったように、点群ならQGISで読み込めますし、建物の形状も表現できますので、こちらを採用しました。
 

## 実際にやってみる

### データを用意する
[3D都市モデル（Project PLATEAU）東京都23区](https://www.geospatial.jp/ckan/dataset/plateau-tokyo23ku)の[OBJ](https://www.geospatial.jp/ckan/dataset/plateau-tokyo23ku/resource/9c8d65f1-a424-4189-92c0-d9e3f7c3d2db)データセット(約2.1GB)
### CloudCompareを利用して`.obj`ファイルをPointCloudに変換
- `.obj`ファイルをCloudCompareにロードします（rescaleしないので、「No」をクリックします）
<img width="600" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/b0f1879b-5579-cfb9-757d-c7aaf7abe6c8.png">

- 3Dモデルを確認できます

<img width="800" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/c7c95460-1a2c-15e5-d9f6-da8b5aa1df7c.png">   
 
- `Edit`->`Mesh`->`Points Sampling on mesh`ツールを使って`.obj`ファイルをポイントにResampleします。Point・Denstiyを自由に設定できますが、PCスペックを考慮しながら調整してみてください。
<img width="400" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/796a7a85-779b-7d99-9bfb-16e085cbbf0b.png">  

- QGIS3.26で断面図を作成します
  - 書き出したLASをQGISに追加し、座標系をドキュメントに記載があったEPSG:6677に設定します
  - LASファイルがロード（若干時間がかかります）できたら、標高によって色が変化するスタイルが自動にセットされますが、レイヤスタイル「範囲のみ」にすれば後程断面を描く時に範囲を確認しやすいのでおすすめです。背景地図も追加します。

<img width="800" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/e7919e26-6b6c-3af6-250c-9365399bcbb8.png"> 
 
  - メニューバーの`ビュー`→`標高断面図`を開き、好きなルートを書いていきます
<img width="800" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/d18454f1-8f9c-0afe-3a15-042cd5c1b891.png"> 

  - 断面図を書き出します。軸関係のパラメータを全部0にしたら、軸なしの画像を保存できます。
<img width="400" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/80f9ab50-1c49-cf1a-c99d-ffe7e388cb56.png"> 

  - 今回作った断面図
a. 東京タワー
 <img width="100" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/ab1418c6-2310-5183-fc5d-085e3372de3e.png"> 

b. レインボーブリッジ
 <img width="1000" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/2cc05a33-9723-b597-eab5-18dce8b6845e.png"> 

c. 東京駅・銀座エリア
 <img width="1000" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/17e958ed-f70b-6251-02d5-34a1929e42f1.png"> 


- 画像を加工して、出来上がり！
    - ツール：Adobe　PhotoshopとAdobe Illustrator
    - 色は<font color="#055773">MIERUNEブルー</font>(#055773)です
<img width="1000" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365400/16107636-7822-32a9-ce50-2f5b907bf1b9.png"> 



:::note info
明日は@Kanahiroさんによる[THREE.jsでGPGPU](link)です！お楽しみにー
:::