Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Avatar for nokonoko1203 nokonoko1203
November 30, 2024

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

Avatar for nokonoko1203

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/