Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

日本全国・都市3D化プロジェクト「PLATEAU」とデータ変換OSS「PLATEAU GI...

nokonoko1203
November 30, 2024

日本全国・都市3D化プロジェクト「PLATEAU」とデータ変換OSS「PLATEAU GIS Converter」の公開

nokonoko1203

November 30, 2024
Tweet

More Decks by nokonoko1203

Other Decks in Technology

Transcript

  1. 株式会社MIERUNE 西 尾 悟(@nokonoko_ 12 0 3 ) 2 0

    2 4 - 1 1 - 3 0 Rust.Tokyo 2 0 2 4 都市3D化 プ ロ ジ ェクト「PLATEAU」と 「PLATEAU GIS Converter」の公開 RustによるGIS × 3 Dデータ処理
  2. • 西 尾 悟(@nokonoko_ 12 0 3 ) • 前職:

    建設コンサルタント(河川構造物) • 現職: 2児の 父 をやりながら株式会社 MIERUNEでGIS(地理空間情報)とWeb開 発を 行 う、Engineering Managerです! • Python / Rust / GIS / 点群 / 3D Tiles / AWS / WebGL / PLATEAU ADVOCATE / Cesium Certi fi ed Developer https://twitter.com/nokonoko_ 1203 https://qiita.com/nokonoko_ 1 203
  3. 文 化財総覧WebGIS 奈良 文 化財研究所 https://heritagemap.nabunken.go.jp/ かつ「位置情報」に関わるならなんでもやる「GIS屋」です PLATEAU QGIS Plugin

    国 土 交通省 https://github.com/MIERUNE/plateau-qgis-plugin マインクラフト 高 松市 https://www.city.takamatsu.kagawa.jp/kurashi/shinotorikumi/machidukuri/toshi/maikura.html AIST 3 DDB Client 産総研 https://mierune.github.io/aist_ 3 ddb_client/
  4. PLATEAU to Minecraft( 高 松市) https://x.com/G 7 _MLIT_JAPAN/status/ 167 76

    44 599 643 47 18 72 https://x.com/MIERUNE_inc/status/ 16 731 578 62 69 106 585 7 ?s= 2 0
  5. 自己 紹介(会社や個 人 としての活動の 一 部) 東京 大 学でのデジタルツイン ・

    GISに関わる講義の 一 部に講師として参加 https://dss.csis.u-tokyo.ac.jp/event/ 2 023 10 12 /
  6. 市 民 協働による樹 木 管理DX https://www.mlit.go.jp/plateau/use-case/uc 2 3 - 14

    / • 市 民 がスマートフォンアプリを使って都市公園内の樹 木 情報を収集し、データベース化する取り組み • 収集したデータは、樹 木 の環境価値(CO 2 吸収量など) の評価や、都市緑化 ・ 脱炭素まちづくりの推進に活 用 • 仙台市の榴岡公園で実施され、市 民 参加型のワークショ ップを通じてデータ収集が 行 われた • この取り組みは、 行 政と市 民 の協働による樹 木 管理のデ ジタル化(DX)を 目 指している
  7. 都市 高 速道路管理の効率化 https://www.mlit.go.jp/plateau/use-case/uc 2 3 - 22 / •

    MMS測量で取得した 高 密度な点群データを 用 い、都市 高 速道 路の各部材を 自 動分類 ・ モデリングし、3D都市モデルを 自 動 生 成するシステムを開発 • 生 成した3D都市モデルをGISソフトやBIMソフトで活 用 し、都 市 高 速道路の管理 ・ 保全業務の効率化を 目 指している • 自 動分類機能の精度は77% ~ 82%で、 工 数を75% ~ 80%削減 できましたが、複雑な構造物の分類精度向上が課題として残っ た • アルゴリズムの 高 度化や3D都市モデルの詳細度向上を図り、低 コストかつ効率的な道路インフラ管理業務の実現を 目 指す
  8. 地下街データを活 用 したナビゲーションシステム https://www.mlit.go.jp/plateau/use-case/uc 2 3 - 05 / •

    東京駅や品川 ・高 輪エリアで、地上と地下の情報を統合したデジタルツイ ン基盤を構築し、エリア全体をシームレスに繋ぐナビゲーションシステム を開発した • 既存の「東京ステーションナビ」アプリに、3D都市モデルを活 用 した三次 元ルートナビゲーション機能やARナビゲーション機能を追加し、ユーザー の利便性を向上させた • 平常時だけでなく、災害時を想定した情報配信システムを開発し、避難場 所や帰宅困難者受 入 施設の情報を提供することで、来街者の安全 ・ 安 心 を サポートしている • 駅と街を繋ぐ統合デジタルツインを活 用 し、エリアマネジメントのDX(デ ジタルトランスフォーメーション)を推進し、安全 ・ 安 心・ 快適なエリア の実現を 目 指している
  9. 地理空間情報とは 地図投影法 早 見 表 https://www.wing fi eld.gr.jp/archives/ 1 09

    39 「座標参照系」: 地球上の位置を数値の座標で表現するための基準 地球のような楕円体を平 面 (画 面・ 紙)に投影する場合、距離 ・面 積 ・角 度が必ず歪む
  10. 地理空間情報を利 用 した効果的なビジュアライゼーション例 全国100万件の交通事故マップ-みえない交差点 朝 日 新聞デジタル https://www.asahi.com/special/jiko-kosaten/ ウクライナ 戦時下の復興

    キーウ近郊からの報告 読売新聞オンライン, 特別協 力 :渡邉英徳 ・ 東京 大 学 大 学院教授 https://www.yomiuri.co.jp/world/ukraine-reconstruction/ あなたの街の地価は?   マップで 見 る上昇と下落 日 本経済新聞 https://vdata.nikkei.com/newsgraphics/land-value-map/
  11. 高 品質だが、利 用 までのハードルが 高 い →変換のためのOSS実装に 至 る •

    「機械可読可能なXML形式」ではあるが、仕様が難解すぎる • ファイルサイズが膨 大 なため、そのままの利 用 はできない • 変換のためには 高 価な有償ソフトウェアが必要
  12. 変換可能フォーマット • GeoPackage • GeoJSON • Wavefront OBJ • glTF

    • 3 D Tiles • Mapbox Vector Tiles (MVT) • CZML • KML • Shape fi le • Minecraft
  13. 変換可能フォーマット • GeoPackage → GISに特化したSQLite • GeoJSON → GISに特化したJSON •

    Wavefront OBJ → 3 Dデータを格納するテキストデータ群 • glTF → 3 Dデータを格納するバイナリデータ群 • 3 D Tiles → glTF • Mapbox Vector Tiles (MVT) → タイル形状に分割されたpbf • CZML → 4 Dデータを格納するJSON • KML → Google Earthで利 用 するXML • Shape fi le → GISに特化したバイナリデータ群 • Minecraft → ボクセル
  14. GeoPackage • SQLiteをGISに特化する形で拡張したもの • 単 一 のファイルで複数のレイヤー(道路と 建物、など)を管理できる • DBのため、パフォーマンスも良い

    • オープンソースGIS界隈では実質の業界標 準となっている OGC® GeoPackage Encoding Standard https://www.geopackage.org/spec/
  15. GeoJSON • JSON形式(テキスト形式)で地物を表現 • 点(Point) ・ 線(LineString) ・面 (Polygon)の他に複数形(Multi〇〇) が定義可能

    • JavaScriptで取り扱いやすい • 人 間可読性が 高 い • テキスト形式のため、ファイルサイズが肥 大 化しやすい
  16. Wavefront OBJ • 3 Dモデルの形状データを記録するファイ ル形式 • 頂点座標や 面 の情報などをテキスト形式で

    記述する • 多くの3DCGソフトウェアで採 用 され、標 準的なデータ交換形式の1つ • マテリアル情報は別ファイル(.mtl)で定義 し、テクスチャマッピングなども可能
  17. glTF • WebGLでの利 用 が想定された3Dデータ • JSON/.bin/Textureの3パートに分かれる • 3 D形状の他に、カメラ

    ・ ライトの位置、 アニメーションなどの3Dシーン全体を記 録する • JSON形式の「glTF」とバイナリ形式の 「glb」がある • 3 D Tilesは複数のglbからなるフォーマッ ト glTF https://www.khronos.org/gltf/
  18. 3 D Tiles • Webで 大 規模3Dデータを可視化するため のデータ • 「タイル」に分割されているため、個々の

    ファイルサイズが 小 さくなる • カメラとの距離によってタイルが変わる • 点群データやメッシュデータなどの 高 速に 描画することができる • glTFがベースとなっている • Cesiumなどで可視化することができる 3 D Tiles https://github.com/CesiumGS/ 3 d-tiles
  19. Mapbox Vector Tiles (MVT) • ベクタータイルとも呼ばれるタイル形式の Protocol Bu ff ers

    • 主にWeb地図利 用 される • ベクトル形式(点、線、ポリゴン)のまま タイル分割されて配信される • 拡張 子 は.mvtや.pbfが利 用 される 国 土 地理院ベクトルタイル提供実験 https://maps.gsi.go.jp/development/vt_expt.html
  20. CZML • Cesiumで利 用 可能な4D( 3 D × 時系列) フォーマット

    • JSON形式で記述される • 線、点、3Dモデルなどを利 用 した時系列 アニメーションを作成することができる • CZMLからglTFを参照することも可能 Cesium Time Animation using CZML https://cesium.com/blog/ 2 0 1 8 / 03 / 21 /czml-time-animation/
  21. Shape fi le • 1990年代から存在する、古いバイナリ形 式のフォーマット • 地 方 公共団体などで広く利

    用 されている が、デメリットが多い • ファイルサイズに2GBの制限がある • フィールド名が最 長 10 文 字まで • フィールド数が最 大 255個まで • 最低3ファイル必要 • など
  22. Minecraft(MCA) • .mcaファイルは、Minecraft(Java版) のワールドデータを保存するために使 用 さ れる独 自 のファイル形式 •

    1つの.mcaファイルには、最 大 1024個の チャンク( 32 x 32 のチャンク領域)のデー タが含まれている • 5 12 m× 512 m(× 38 4 mの 高 さ)の領 域に相当
  23. Rustである必然性があった 大 規模データの 高 速変換 XMLのような冗 長 なテキスト形式かつ3Dデータであるため、変換対象は10GBを超えることもある。 1都市丸ごと変換するユースケースは多々あり、これらを現実的な時間で変換するためには 高

    速かつ安全に並列処理を 行 う必要があった。 クロスプラットフォームでのビルド 幅広いユーザーを取り込む必要があったため、WindowsとmacOSの2つのプラットフォームで動作させる必要があった。 Rustのように1つのコードベースから複数のプラットフォームにビルドすることが可能な点は、 非 常に魅 力 的に 見 えた。 GUIの構築 複雑なコマンドライン操作を避け、 一 般ユーザーでも直感的に利 用 できるGUIが求められていた。 Web屋が簡単に構築でき、Rustの恩恵を受けることができるTauriの存在は 大 きかった。
  24. Tauri(GUI)の存在 • JavaScriptでフロントエンドを開発可能 • Rustでバックエンド開発を 行 う • Tauri 2

    . 0 ではLinux、macOS、Windows、Android、iOS 用 のアプリを開発可能 https://tauri.app/
  25. ただし、ハードルは 高 い • RustのGISクレートは存在しないが、3次元に対応したクレートは存在しない • ポリゴンの三 角 化 ・

    専 用 の幾何データ表現を実装 • 標 高 を楕円体 高 に変換、地 心 座標系への変換、平 面 直 角 座標系の定義などを実装 • MIERUNE/ fl atgeom-rs ・ MIERUNE/earcut-rs ・ MIERUNE/japan-geoidなどを公開 • PLATEAU仕様に準拠したCityGMLをパースするクレートも存在しない • XMLスキーマを解析し、定義 • 手 続きマクロで導出 • 個別ファイル形式ごとの仕様を満たす、出 力 ドライバーを実装 • 特に、プロジェクトで最重要な3D Tilesの最新仕様を満たすクレートを実装 • テクスチャアトラス作成 ・ 解像度最適化のためのクレートも実装
  26. Rust × Geometry 3次元ポリゴン 用 の幾何データ表現を実装(MIERUNE/ fl atgeom-rs) • ジャグ配列を回避したフラットなデータ構造

    • 効率的なシリアライズ ・ デシリアライズが可能 • 3次元座標に対応 https://github.com/MIERUNE/ fl atgeom-rs
  27. Rust × Geometry 3次元での座標変換 • 3次元の地理座標(経緯度 ・ 標 高 )から地

    心 座標 (XYZ)への変換 • 経緯度だけでなく、平 面 直 角 座標系とよばれる 日 本固有のXYZ座標も 入力 として受け付ける • 独 自 に計算処理を実装 https://www.gsi.go.jp/kanshi/faq.html# 3
  28. XMLスキーマを解析し、構造体を定義 • CityGML ・ GML ・ i-UR のスキーマの上に、 PLATEAU独 自

    の仕様が定められている • XMLスキーマから、構造体定義 用 の 文 字列を得 るプログラムも実装 • 20種類ある地物の型を個別にパスを定義 Rust × CityGML https://github.com/MIERUNE/plateau-gis-converter/tree/main/nusamai-plateau
  29. quick-xmlによる 高 速なXMLパース • ファイルサイズが 大 きいため、DOMツリー全体 をメモリに載せるのは難しい • StAX(Streaming

    API for XML)ベースのパー サーのためストリーミング可能で、メモリ効率 が良い • オーバーヘッドも少ないため、 高 速に処理可能 Rust × CityGML https://github.com/ta fi a/quick-xml
  30. • 地物を地理的に「タイル分割」し、glTF拡張仕 様を満たしたglbファイルを 大 量に出 力 • 3 D Tiles仕様を満たしたtileset.jsonを出

    力 • テクスチャなどを適切に貼り付ける • 大 量にファイル出 力 を 行 うため 至 る所で並列化 • テクスチャなしのデータであれば、1GB程度の CityGML to 3 D Tilesが1s未満で完了 Rust × 3 D Tiles 「 3 D Tiles」の出 力 (MIERUNE/cesiumtiles-rs) https://github.com/MIERUNE/cesiumtiles-rs
  31. • {zoom}/{x}/{y}.glbのように、タイル分割された ファイルを出 力 する • 地物を分割→タイル順にソート→タイルを出 力 の 手

    順を全てRayonとmpscで並列化 Rust × Parallel Processing タイル分割の並列化 https://maps.gsi.go.jp/development/siyou.html
  32. • glTFのモデル定義がなされたクレートは存在す るが、属性情報を取り扱うことは出来ないた め、 自 作 • 具体的に以下の拡張機能に対応していない • EXT_mesh_features:

    頂点に「地物ID」を振る • EXT_structural_metadata: 地物IDと属性情報 を紐付ける https://github.com/CesiumGS/glTF/tree/ 3 d-tiles-next/extensions/ 2 . 0 /Vendor/EXT_mesh_features Rust × 3 D Tiles https://github.com/CesiumGS/glTF/tree/ 3 d-tiles-next/extensions/ 2 . 0 /Vendor/EXT_structural_metadata glTFの拡張仕様に対応
  33. • 元データは(基本的に)地物ごとにテクスチャ が作成されている上、重複箇所も多い • そのまま利 用 すると 大 量の画像ファイルがglTF に組み込まれ、ファイルサイズやドローコール

    増加により描画パフォーマンスが低下する • テクスチャアトラスを作成することで、どちらも 低減を図れる https://github.com/MIERUNE/atlas-packer Rust × Texture 数千枚の画像を効率的に配置 テクスチャアトラス作成のためのモジュールを実装(MIERUNE/atlas-packer)
  34. • ファイルサイズ ・ 処理時間のどちらも効率よく • タイルのズームレベルに合わせた低解像度化 • webp利 用 などによるファイルサイズ軽減

    • アトラスの空きスペースを埋めるように配置 • 画像キャッシュなどによる読み書き速度軽減 https://github.com/MIERUNE/atlas-packer Rust × Texture タイルごとの更なる画像最適化
  35. (おまけ)Rust × Minecraft • ポリゴンをボクセライズするアルゴリズムを実装 • Minecraftで利 用 可能な.mca形式に変換 •

    CityGMLが保有する「地物型」(道路、植 生 な ど)に応じて利 用 するブロックを変更 https://github.com/MIERUNE/dda-voxelize-rs ddaアルゴリズムによるボクセライザーの実装(MIERUNE/dda-voxelize-rs)
  36. (おまけ)Rust × PointCloud • LAS/LAZやCSVなどの 一 般的な点群データを取り 込み、3D Tilesに変換するツールを作成 •

    ズームに応じた適切な点群の間引きや量 子 化によ る圧縮アルゴリズムなどを実装 • ロードされれば超 高 速で動作する https://github.com/MIERUNE/point-tiler 点群データの3D Tiles化(MIERUNE/point-tiler)
  37. Basis Universal • GPUが直接扱える圧縮テクスチャフォーマッ ト • 解凍する必要がないため、メモリ使 用 量が 大

    幅に削減される • glTFファイルフォーマットでサポートされて いる • ファイルサイズとGPUメモリ使 用 量の 大 幅な 削減につながる • レンダリング速度が向上する https://www.khronos.org/ktx/