--- title: PyCon JP 2022 Developer & Community Sprint description: PLATEAUのCityGMLに変換ツールのノウハウ探る tags: geo, python, gis lang: ja-jp --- ※ HackMDの使い方 - https://hackmd.io/s/features-jp PLATEAU CityGML変換について整理 === ![](https://i.imgur.com/z12ojIX.jpg) ### 目的 国土交通省の[Project PLATEAU(プラトー)](https://www.mlit.go.jp/plateau/)で公開されている3D都市空間モデルであるCityGML形式のファイルは中間フォーマットと定義されており、利用者が「使いやすいフォーマット」に変換した上で利用することが想定されている。 PLATEAUでの公式のCityGML形式の変換ツールとして[FME](https://www.safe.com/fme/)というツールを使用して変換することが推奨されている。 FMEはデータ変換として優秀なツールであるが、有償ツールであるために学生やお試し目的で使用するためには敷居が高い。 そこで、3D都市空間モデルの利活用を広げるために、CityGML形式の変換の為の情報収集と整理し、オープンソースのツール等も作成していく #### CityGMLとは "CityGML は、都市スケールの分析・シミュレーションに必要なセマンティクスを記述できる地理空間データのための唯一の標準データフォーマットである。諸外国では国家・都市レベルでのデータ整備が進められているが、日本における大規模なデータ整備は今回が初の試みである。 CityGML は、都市に存在する建物や街路、橋梁などのオブジェクトを地物として定義し、形状や名称、種類、建築年といったオブジェクトについての空間・時間・主題に係る全ての情報を地物の属性として定義している。この厳密性の高さにより、誰が作った3D都市モデルであっても、どの場所の3D都市モデルであっても、一貫性のあるデータ構造となる。" from - https://www.mlit.go.jp/plateau/learning/ :::warning リンク Contact:zap: citygml-convert-tools * [GitHub](https://github.com/GeoPythonJP/citygml-convert-tools) * [wiki](https://github.com/GeoPythonJP/citygml-convert-tools/wiki) * [Discord #citygml-convert-toolsチャンネル](https://discord.gg/K9f3ygK) ::: ## 2022/10/29 Python勉強会@インフォ・ラウンジ ### 今日のテーマ [3D City Database](https://github.com/3dcitydb/3dcitydb)を何とかしてみる :::info 参加者 Contributers :smile: - 参加:[name=@homata] [name=imamura] ::: ### 今村の作業 #### 3DCityDBのdocker版を試してみる - Docker images quick start: https://3dcitydb-docs.readthedocs.io/en/latest/first-steps/docker.html - Docker images full docs: https://3dcitydb-docs.readthedocs.io/en/latest/3dcitydb/docker.html - Github: https://github.com/3dcitydb/3dcitydb - [[Docker] 3D City DB に CityGML をインポートする](https://qiita.com/onkbear/items/5730ac3e59d30054ef78) ##### コマンド ``` // cdbという名前で3DCityDB Dockerコンテナを実行 // 東京の座標参照系EPSGコードは「6677」 // https://lemulus.me/column/epsg-list-gis // xxxxxxは要変更 docker run -d -p 5432:5432 --name cdb \ -e POSTGRES_PASSWORD=xxxxxx \ -e SRID=6677 \ 3dcitydb/3dcitydb-pg ``` gmlファイルをローカルのわかりやすいところに配置しておく(私は `/Users/kaizumaki/udx` ディレクトリ下に置きました)。 ``` // Importer/Exporterを使ってgmlをimport // xxxxxxは要変更 docker run --rm --name impexp -i -t \ -e CITYDB_TYPE=postgresql \ -e CITYDB_HOST=172.17.0.2 \ -e CITYDB_PORT=5432 \ -e CITYDB_NAME=postgres \ -e CITYDB_USERNAME=postgres \ -e CITYDB_PASSWORD=xxxxxx \ -v /Users/kaizumaki/udx:/data \ 3dcitydb/impexp:edge-alpine import **/*.gml ``` ### 小俣の作業 #### 3DCityDBのツール * [Project-PLATEAU/CityGML-validation-function](https://github.com/Project-PLATEAU/CityGML-validation-function) * [3DCityDB-Loader for QGIS](https://github.com/tudelft3d/3DCityDB-QGIS-Loader) * [3dcitydb/3dcitydb-qgis-explorer](https://github.com/3dcitydb/3dcitydb-qgis-explorer) * Loading 3D City Models in QGIS - [Using QGIS to explore the CityJSON 3D City Models.](https://towardsdatascience.com/loading-3d-city-models-in-qgis-46347a638760) #### CityGMLの構造 02.3D都市モデル標準作業手順書 (plateau_doc_0002_ver02.pdf) page 76 3D 都市モデルのファイル名称 [メッシュコード]_[地物型]_[CRS] _[オプション].gml 表 5-8 接頭辞 | 地物型 | 接頭辞 | |:-------------------------------------------------------------|:-------| | 建築物、建築物部分、建築物付属物、及びこれらの境界面、開口部 | bldg | | 道路 | tran | | 都市計画決定情報 | urf | | 土地利用 | luse | | 津波浸水想定 | tnm | | 高潮浸水想定区域 | htd | | 洪水浸水想定区域 | fld | | 土砂災害警戒区域 | lsld | | 内水浸水想定区域 | ifld | | 都市設備 | frn | | 植生 | veg | | 起伏 | dem | #### 多角形の三角形分割 * 多角形から三角形分割が必要 * 座標系は、経緯度座標系(6697)から平面直角座標系(6676, 6677)のXYZ座標に変換する ##### 表 5-9 空間参照系の略称 オブジェクトに適用される空間参照系 略称 * 日本測地系2011における経緯度座標系と東京湾平均海面を基準とする標高の複合座標参照系 6697 * 日本測地系2011における経緯度座標系 6668 ##### 変換 * 単調多角形を三角形分割する手法 * 耳刈り取り法 * [joshuaskelly/earcut-python](https://github.com/joshuaskelly/earcut-python) * [mapbox-earcut 1.0.0](https://pypi.org/project/mapbox-earcut/) * [skogler/mapbox_earcut_python](https://github.com/skogler/mapbox_earcut_python) * [Plateau の 3D データから建物を個別にメッシュとして取り出す](https://zenn.dev/kymok/articles/ef33a801527372) * [【Python】trimeshでmeshから色付きの点(群)をサンプリングできるようになりました。](https://blog.neno.dev/entry/2022/04/13/182847) * [mikedh/trimesh](https://github.com/mikedh/trimesh) ##### 参考コード * [AcculusSasao/plateaupy](https://github.com/AcculusSasao/plateaupy) * [ksasao/PlateauCityGmlSharp](https://github.com/ksasao/PlateauCityGmlSharp/) ##### Viewer * windows * [FZKViewer](https://www.iai.kit.edu/1302.php) * [FZKViewer のインストール(Windows 上)](https://www.kkaneko.jp/tools/win/fzkviewer.html) * mac * [azul](https://github.com/tudelft3d/azul) ##### テストコードで表示 FZKViewerでLOD1データ表示 ![](https://i.imgur.com/uddZxcA.png) テストコードでLOD1データ表示(MeshLab) ![](https://i.imgur.com/HfHJQl5.png) ## 2022/10/16 ### 今日のテーマ PLATEAU CityGML変換ツールのノウハウを集める&作成 :::info 参加登録 connpass * [PyCon JP 2022 Developer & Community Sprint - connpass](https://pyconjp.connpass.com/event/260219/) ::: :::info 参加者 Contributers :smile: <!-- - 継続参加:[name=名前] [name=名前] [name=名前] - 初参加:[name=名前] [name=名前] [name=名前] --> - 参加:[name=@homata] [name=imamura] ::: <!-- :::success TODOリスト :dart: - [ ] 大項目1 - [ ] タスク1 - [ ] タスク2[name=名前][name=名前] - [ ] 大項目2 - [ ] タスク1 - [ ] タスク2 [name=名前] ::: --> <!-- ##### 今日の作業内容 Today's Mission: - [ ] 大項目1 - [ ] タスク1 - [ ] タスク2 - [ ] タスク3 [name=名前][name=名前] - [ ] 大項目2 --> <!-- ##### 本日の成果 Today's Outcome: `中間報告・最終報告で追記する箇所です` 1. aa 1. aa 1. aa --> ### 今村作業 - CityGML Wiki(商用ソフトウェア、フリーウェア、オープンソースソフトウェアおよびツールのリストあり) - https://www.citygmlwiki.org - とりあえずG空間情報センターのCKANから東京都23区のCityGMLをダウンロードしてみる - https://www.geospatial.jp/ckan/dataset/plateau-tokyo23ku - 4.2GBありました。ネットワーク圧迫してすみません。。 - 結局他のファイルも全部ダウンロードしました。 - PlateauCityGml(CityGML形式 (.gml) を Wavefront OBJ (.obj) 形式に変換するツール)を試す - https://github.com/ksasao/PlateauCityGmlSharp - Visual Studioでビルドするものらしい。macOSなのでVisual Studio for Macをインストール。 - ビルドしたらexeファイルができました。結局macOSで使えず... - しょうがないのでBootCampに入れているWindows10でexeを試す。exeにgmlファイルをDrag&Dropすると、なんかobjファイルが生成された。 - 試したgmlファイル→13100_tokyo23-ku_2020_citygml_3_2_op/udx/bldg/53392546_bldg_6697_2_op.gml - 上で生成されたobjファイルを3Dモデリングツールで表示したい - Unityを試す。Personal版を使うのに一苦労する。 - Unity HubでProjectを作成。 - Projectの画面で「Assets」にobjファイル入ったフォルダをDrag&Drop - 「Assets」内に入ったobjたちをCtrl+Aで全選択し、「Hierarchy」にごそっとDrag&Drop - 「Scene」のウィンドウを見る。 - ![](https://i.imgur.com/T29P1jA.jpg) - appearance付きのgmlをobjに変換してみる - 試したgmlファイル→13100_tokyo23-ku_2020_citygml_3_2_op/udx/bldg/53394622_bldg_6697_2_op.gml - 同じ階層に「53394622_bldg_6697_appearance」というフォルダが存在する - テクスチャ付きで表示できた。 - ![](https://i.imgur.com/BBskDJk.png) ### 小俣作業 #### CityGMLとは "CityGML は、都市スケールの分析・シミュレーションに必要なセマンティクスを記述できる地理空間データのための唯一の標準データフォーマットである。諸外国では国家・都市レベルでのデータ整備が進められているが、日本における大規模なデータ整備は今回が初の試みである。 CityGML は、都市に存在する建物や街路、橋梁などのオブジェクトを地物として定義し、形状や名称、種類、建築年といったオブジェクトについての空間・時間・主題に係る全ての情報を地物の属性として定義している。この厳密性の高さにより、誰が作った3D都市モデルであっても、どの場所の3D都市モデルであっても、一貫性のあるデータ構造となる。" https://www.mlit.go.jp/plateau/learning/ [20150224_CityGRID製品概略](http://www.infoserve.co.jp/doc/UVMSystems/20150224_CityGRID%90%BB%95i%8AT%97%AA.pdf) 【CityGML とは?】 CityGML は、仮想 3D 都市および景観モデルの記述、管理、交換のためのデータ形式標準であり、平成 20 年 8 月に OGC 標準となった。OGC で原案が策定された ISO 19136:2007 Geography Markup Language(GML)の応用スキーマとして実装されている。記述内容としては、屋内を含む 3D 建物はもちろん、地形や道路などの地物、電話ボックスや信号機などの“City Furniture”や樹木など、様々な都市構成要素がモデル化されている。CityGML 策定以前は 3D都市モデルの交換に CAD や CG などのデータ形式が用いられていたが、幾何形状のみで複雑な地物間の関係等を記述できない、地形や植生データ等の記述管理や地理空間座標系に未対応、などの問題があった。先進国ドイツではベルリンなど複数都市で CityGML を公式 3D データ形式として採用し、都市全体のデータベースを構築済で、各種解析や行政サービス等に利用している。CityGML の大きな特徴の一つは LOD(Level Of Detail)である。LOD とは、もともとは CG(Computer Graphics)の分野で、視点からの距離に応じて描画する 3D オブジトの頂点数を増減させる技術である。CityGML は、3D 都市モデルの詳細さのレベル設定にこの考え方を導入し、LOD の段階(全 5 段階を設定)に応じてモデルの表現する情報の詳細さ(例えば、地形レベル、建物外形レベル、建物内部構造レベル、等)を統一しており、LOD を通じて地形データ(DEM65、TIN66 等)、屋外地図(道路地図)、屋内地図(建物内 3D CAD)などを統合利用できる。最も詳細な屋内地図レベル LOD4 では、BIM 分野の IFC 標準と調和が図られており、IFC 形式のモデルをインポート可能である。 CityGML のもう一つの大きな特徴は、Application DomainExtension(ADE)と呼ばれる仕様拡張の方法を備えており、アプリケーション毎に必要となる詳細なモデル記述仕様を追加定義可能な点である。現在、トンネル、橋、配管設備、騒音分布等を表現する ADE がそれぞれ定義され利用されている。CityGML は、現在主に欧州での採用事例が多い。ドイツ・ベルリン市では、市街の 3D モデルの整備が進んでおり、地下の配管設備等も含めたモデル化を行っている。また、スイス・チューリッヒ市でも、LOD2 の 3D 都市モデルを構築している。フランスでは、仏地理院(Institute Geographique National(IGN))が中心となって TABI-3D プロジェクトと呼ばれる、都市の直性の 3D モデル化を行うプロジェクトが進められている。アジアにもいくつかの採用事例があり、中国・武漢市において CityGML を用いた 3D 都市モデルの構築が進められている。 ##### <出典> 平成 23 年度経済産業省委託業務 23 情報経・活第 337 号 平成 23 年度電子経済産業省推進費(空間位置情報コードの活利用等のためのサービスモデルに関する調査事業) 事業報告書 平成 24 年 3 月 一般財団法人 日本情報経済社会推進協会 P130~P131 http://www.meti.go.jp/meti_lib/report/2012fy/E002699.pdf #### CityGMLの解説 * [CityGMLとCityJSONについての理解](https://tidacancan.medium.com/citygmlとcityjsonについて-アドベントカレンダー12月16日-84cde663c429) ##### CityGML 仮想3D都市モデルの保存と交換のためのオープンな標準化データモデル、交換フォーマット。3D都市モデルの基本的なエンティティ、属性、関係の共通の定義に到達することを目的に開発された。 主な特徴 * LOD(Level Of Detail)の考え方が導入されており、LOD の段階(全 5 段階を設定)に応じてモデルの表現する情報の詳細さが統一されている * Application Domain Extension(ADE)と呼ばれる仕様拡張の方法を備えており、アプリケーション毎に必要となる詳細なモデル記述仕様を追加定義可能 (例:現在、トンネル、橋、配管設 備、騒音分布等を表現する ADE) * 3D都市モデルの費用効果の高い持続可能なメンテナンスに関して特に重要になる * 異なるアプリケーション分野で同じデータを再利用できる * 屋内を含む 3D 建物、地形や道路などの地物、電話ボックス、信号機や樹木など、様々な都市構成要素がモデル化されている ##### CityJSON デジタルマケットまたはデジタルツインとも呼ばれる3D都市モデルを格納するためのJSONベースのエンコーディング。ファイルの視覚化、操作、編集を容易にできるようコンパクトで開発者に優しい形式を提供することを目的に開発された。 主な特徴 * シンプルで、いくつかのソフトウェアでサポートされている * CityJSONとCityGMLの間で双方向変換が提供されている - →CityJSONの使用=CityGMLデータモデルの使用 * CityGMLの同等のファイルよりも平均して6倍コンパクト * 国際規格として公式に標準化されていないが、OGC CityGMLデータモデルのサブセットのエンコーディング #### 仕様 * [Project PLATEAU](https://www.mlit.go.jp/plateau/) * [3D都市モデル標準製品仕様書(第2.3版)](https://www.mlit.go.jp/plateau/file/libraries/doc/plateau_doc_0001_ver02.pdf) * [3D都市モデル標準製品仕様書(第2.3版)(HTML)](https://www.mlit.go.jp/plateaudocument/) * [3D都市モデル整備のためのBIM活用マニュアル(第1.0版)](https://www.mlit.go.jp/plateau/file/libraries/doc/plateau_doc_0003_ver01.pdf) * [3D都市モデルのデータ変換マニュアル](https://www.mlit.go.jp/plateau/file/libraries/doc/plateau_doc_0007_ver01.pdf) * [3D都市モデルのデータ変換マニュアル](https://github.com/Project-PLATEAU/Data-Conversion-Manual-for-3D-City-Model) * [G空間情報センター](https://www.geospatial.jp/ckan/dataset/plateau) * [GitHub](https://github.com/Project-PLATEAU) * [i-都市再生技術仕様(案)/i-UR Technical Materials](https://www.chisou.go.jp/tiiki/toshisaisei/itoshisaisei/iur/index.html) * [東京都デジタルツイン実現プロジェクト](https://info.tokyo-digitaltwin.metro.tokyo.lg.jp/) * [CityJSONに変換するcitygml-toolsの日本語マニュアル](https://github.com/tokyo-digitaltwin/citygml-tools) * [国土交通データプラットフォーム](https://www.mlit-data.jp/platform/) * [スマートシティ官民連携プラットフォーム](https://www.mlit.go.jp/scpf/) #### ツール類 * [CityGML](https://www.ogc.org/standards/citygml) * [CityJSON](https://www.cityjson.org/) * [FME](https://www.safe.com/fme/) * [OBJファイル](http://fegemo.github.io/cefet-cg/attachments/obj-spec.pdf) * [OBJファイルフォーマット](https://www.hiramine.com/programming/3dmodelfileformat/objfileformat.html) #### 3D City Database * [3dcitydb/3dcitydb](https://github.com/3dcitydb/3dcitydb) The 3D City Database is also available as Docker image. You can either build an image for PostgreSQL or Oracle yourself using one of the provided Docker files or use a pre-built PostgreSQL image from Docker Hub at https://hub.docker.com/r/3dcitydb/3dcitydb-pg. #### 変換ツール ##### Java * [citygml-osm](https://github.com/yuuhayashi/citygml-osm) * [citygml-osm wiki](https://github.com/yuuhayashi/citygml-osm/wiki/Transformation) ##### C# * [PlateauCityGml](https://github.com/ksasao/PlateauCityGmlSharp) ##### FME * [『PLATEAU』の都市3Dデータ形式CityGMLをFBXに変換してUnityで遊ぶ ](https://tatsuya1970.com/?p=15666) * [PLATEAUのCityGMLモデルを、FBXに変換する手順を世界一わかりやすく説明する](https://qiita.com/GaT39/items/9c69942200409c197de5) ##### CityJSON (Java) * citygml4j - The Open Source Java API for CityGML * [citygml4j / citygml-tools](https://github.com/citygml4j/citygml-tools) * [citygml4j /citygml4j](https://github.com/citygml4j/citygml4j) * [cityjson/cjio](https://github.com/cityjson/cjio) * [Plateau の 3D データから建物を個別にメッシュとして取り出す](https://zenn.dev/kymok/articles/ef33a801527372) ##### 便利な編集ツール * [CloudCompare](https://cloudcompare.org/) * [Meshlab](https://www.meshlab.net/) * [Blender.jp](https://blender.jp/) ##### ハンズオン [PLATEAU Hands-on 03](https://asciistartup.connpass.com/event/256614/) ###### ハンズオン①:Meta Quest 2 で楽しむ PLATEAU VRアプリケーションの開発 * テキスト: https://drive.google.com/file/d/18rSspS0iZIkQigAMP0xHImKHunFeEwWZ/view?usp=sharing * データ: https://drive.google.com/file/d/18r-ZtFOaDlPD_bXK60BHKJIIZY6TI9sF/view?usp=sharing Unity Hub Unity 2021 LTS(Unity Hub からセットアップしてください)/ Visual Studio モジュールとして Android Build Support (Open JDK, Android SDK&NDK Tools)を追加してください Meta Quest / Meta Quest 2 の開発対応 Meta Quest 2 をスマフォの Oculus アプリを使って 開発者モードにしておいてください。) https://holoeyes.zendesk.com/hc/ja/articles/1500001888282 Oculus Link のセットアップ(開発中のデバッグは Oculus Link の機能を使って PCと接続して行います) https://vr-gamequest.com/oculus-air-link-config/ Meta Quest / Meta Quest 2 以外での開発対応 Windows Mixed Reality / HTC VIVE 等を利用する場合、それぞれの開発環境を整えてください。(詳細については割愛させていただきます) Steam VR 経由でのアプリ実行ができる環境が必要です。 なお、Meta Qest / Quest 2 以外のデバイスでは、対応できない機能等があります。 ##### ハンズオン②:PLATEAUで学ぶBlenderの基本操作と3D都市モデルの活用方法 テキスト: https://drive.google.com/file/d/17sE_FUJr1CkxPQeHtEsZ66mPfTldgN1a/view?usp=sharing ハンズオンの事前準備: https://drive.google.com/file/d/1RRtxOI0FQbQIw80sJsOSAlAZ_sP4LOju/view?usp=sharing citygml -> obj ``` $ docker pull citygml4j/citygml-tools $ cd 22213_kakegawa-shi_2020_citygml_4_op/udx/bldg $ docker run --rm -u 1000 -v `pwd`:/data citygml4j/citygml-tools reproject --target-crs=6676 51377798_bldg_6697_op.gml $ docker run --rm -u 1000 -v `pwd`:/data citygml4j/citygml-tools to-cityjson 51377798_bldg_6697_op__reprojected.gml $ pip install cjio $ pip install triangle $ cjio 51377798_bldg_6697_op__reprojected.json export obj 51377798_bldg_6697_op__reprojected.obj ``` ##### ハンズオン③:VR空間の作り方 * テキスト: https://qiita.com/tatsuya1970/private/ebad3133f4a5e9ba46dd * https://qiita.com/tatsuya1970/private/cf7272d147baea86a0e8