「3D都市モデル標準製品仕様書 第2.3版」準拠の3D都市モデルから「空間ID」を自動生成するためのツールです。
令和4年度のデジタル庁「デジタルツイン構築に向けた3D都市モデルの整備に関する調査研究」において、人・機械が一意に空間を特定するための3次元グリッド(ボクセル)識別子である「空間ID」の実現・普及に貢献することを目的に、3次元の地理空間情報として中心的役割を担う「3D都市モデル」から「空間ID」を自動生成するツールを開発しました。
このツールは、二つのツールによって構成されています。
対応OSは以下の通りです。
以下のソフトウェアをインストールしておいてください。
空間IDを付与した3D都市モデル生成ツール、空間IDのメタデータ生成ツールのコマンド部のインストール手順は以下の通りです。
コマンドプロンプト(Windows)またはターミナル(macOS / Linux)を起動し、ツールのディレクトリに移動します。
Windows の場合
> cd command
macOS / Linux の場合
$ cd command
Python 仮想環境を作成し有効化します。
Windows の場合
> python -m venv .venv
> .venv\Scripts\Activate
macOS / Linux の場合
$ python3 -m venv .venv
$ source .venv/bin/activate
※ コマンド内の.venv は任意の名前に変更可能です。
Python 仮想環境に依存ライブラリをインストールします。
Windows の場合
> pip install -r requirements.txt
macOS / Linux の場合
$ pip install -r requirements.txt
空間IDのメタデータ生成ツールのビューア部のインストール手順は以下の通りです。
コマンドプロンプト(Windows)またはターミナル(macOS / Linux)を起動し、ツールのディレクトリに移動します。
Windows ���場合
> cd web
macOS / Linux の場合
$ cd web
Python 仮想環境を作成し有効化します。
Windows の場合
> python -m venv .venv
> .venv\Scripts\Activate
macOS / Linux の場合
$ python3 -m venv .venv
$ source .venv/bin/activate
※ コマンド内の.venv は任意の名前に変更可能です。
Python 仮想環境に依存ライブラリをインストールします。
Windows の場合
> pip install -r requirements.txt
macOS / Linux の場合
$ pip install -r requirements.txt
座標変換に必要なファイルをダウンロードします。
Windows の場合
> pyproj sync --file us_nga_egm96_15.tif
macOS / Linux の場合
$ pyproj sync --file us_nga_egm96_15.tif
コマンドプロンプト(Windows)またはターミナル(macOS / Linux)を起動し、ツールのディレクトリに移動します。
Windows の場合
> cd command
macOS / Linux の場合
$ cd command
Python 仮想環境を有効化します。
Windows の場合
> .venv\Scripts\Activate
macOS / Linux の場合
$ source .venv/bin/activate
CityGML から 地物ID(gml_id)と��間IDのペアリストを生成し CSV 出力します。
Windows の場合
> python citygml2id.py [コマンド引数]
macOS / Linux の場合
$ python citygml2id.py [コマンド引数]
コマンド引数は以下の通りです。
| 引数 | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| input_file_or_dir | CityGMLのファイルのパス(*.gml)または上位ディレクトリのパス | ||
| output_file_or_dir | 地物IDと空間IDのペアリストのファイルのパス(*.csv)または上位ディレクトリのパス | ||
| --lod | 処理するジオメトリの最大LOD | 1, 2, 3 | 3 |
| --grid-type | グリッドタイプ | zfxy | zfxy |
| --grid-level | グリッドのズームレベル | 20 | |
| --grid-size | グリッドのサイズ。x y z の順に指定。x のみ指定した場合は y z にも同じ値を適用。将来拡張用。 | ||
| --grid-crs | グリッドの座標参照系のEPSG番号。将来拡張用。 | ||
| --id | IDフィルタ。処理するデータを絞り込む際に gml:id の値を複数指定可能。 | ||
| --extract | 空間IDが付与された CityGML から、空間IDを抽出し、CSVへ出力する場合に指定。 | ||
| --extrude | 2次元データに付与する高さの最小値と最大��(単位:m)。--extract オプション指定時のみ有効。 | ||
| --interpolate | 立体(Solid)内側の空洞をボクセルで埋める場合に指定。Solid形状を持つ「Building(建築物)」「CityFurniture(都市設備)」「Vegetation(植生)」を空間IDに変換する際に使用するオプション。 | ||
| --merge | 上位の空間IDに統合(最適化)する場合に指定。 | ||
| --debug | デバッグログ出力および一時ファイル保持を有効にする場合に指定。 | ||
| -h | 使い方を表示。 |
CityGML および 地物ID(gml_id)と空間IDのペアリストから空間IDが付与されたCityGMLを生成します。
Windows の場合
> python id2citygml.py [コマンド引数]
macOS / Linux の場合
$ python id2citygml.py [コマンド引数]
コマンド引数は以下の通りです。
| 引数 | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| citygml_file_or_dir | CityGMLのファイルのパス(*.gml)または上位ディレクトリのパス | ||
| id_file_or_dir | 地物ID-空間IDペアリストのファイルのパス(*.csv)または上位ディレクトリのパス | ||
| output_file_or_dir | 空間IDを付与した CityGML のファイルのパス(*.gml)または上位ディレクトリのパス | ||
| --spatialid | 空間IDの付与方法 | embedding: CityGMLファイルに空間IDを直接付与 reference: 地物ID-空間IDペアリスト(CSVファイル)への相対パスを記録⇒CityGMLファイルへの空間IDの直接付与は行わず、外部ファイル参照のみで空間IDと紐付けする場合に使用 both: CityGMLファイルへの空間ID直接付与とCSVファイルへの相対パス記録の両者を実行 | both |
| -h | 使い方を表示 |
使用例1: ファイルを指定し、citygml2id.pyを実行する
$ python citygml2id.py ../examples/citygml/udx/bldg/building_sample.gml ../examples/citygml/udx/bldg/spatialid/building_sample_zl23_merged.csv --grid-type zfxy --grid-level 23 --interpolate --merge
※ examplesディレクトリのサンプルデータで動作を確認できます。
使用例2: フォルダに対し、citygml2id.pyを実行(一括処理)する
$ python citygml2id.py ../examples/citygml/udx/bldg ../examples/citygml/udx/bldg --grid-type zfxy --grid-level 23 --interpolate --merge
$ python citygml2id.py ../examples/citygml/udx/urf ../examples/citygml/udx/urf --grid-type zfxy --grid-level 20
※ examplesディレクトリのサンプルデータで動作を確認できます���
使用例3: ファイルを指定し、id2citygml.pyを実行する
$ python id2citygml.py ../examples/citygml/udx/bldg/building_sample.gml ../examples/citygml/udx/bldg/spatialid/building_sample_zl23_merged.csv ../examples/citygml/udx/bldg/building_sample.gml --spatialid both
※ examplesディレクトリのサンプルデータで動作を確認できます。事前に使用例1又は使用例2を実行しておいてください。
使用例4: フォルダに対し、id2citygml.pyを実行(一括処理)する
$ python id2citygml.py ../examples/citygml/udx/bldg ../examples/citygml/udx/bldg ../examples/citygml/udx/bldg --spatialid both
$ python id2citygml.py ../examples/citygml/udx/urf ../examples/citygml/udx/urf ../examples/citygml/udx/urf --spatialid both
※ examplesディレクトリのサンプルデータで動作を確認できます。なお、使用例2を事前に実行しておいてください。
コマンドプロンプト(Windows)またはターミナル(macOS / Linux)を起動し、ツールのディレクトリに移動します。
Windows の場合
> cd command
macOS / Linux の場合
$ cd command
Python 仮想環境を有効化します。
Windows の場合
> .venv\Scripts\Activate
macOS / Linux の場合
$ source .venv/bin/activate
空間IDが付与された CityGML から 地物ID(gml_id)と空間IDのペアリストを CSV 出力します。
Windows の場合
> python citygml2id.py [コマンド引数]
macOS / Linux の場合
$ python citygml2id.py [コマンド引数]
コマンド引数は以下の通りです。
| 引数 | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| input_file_or_dir | CityGMLのファイルのパス(*.gml)または上位ディレ���トリのパス | ||
| output_file_or_dir | 地物IDと空間IDのペアリストのファイルのパス(*.csv)または上位ディレクトリのパス | ||
| --lod | 処理するジオメトリの最大LOD | 1, 2, 3 | 3 |
| --grid-type | グリッドタイプ | zfxy | zfxy |
| --grid-level | グリッドのズームレベル | 20 | |
| --grid-size | グリッドのサイズ。x y z の順に指定。x のみ指定した場合は y z にも同じ値を適用。将来拡張用。 | ||
| --grid-crs | グリッドの座標参照系のEPSG番号。将来拡張用。 | ||
| --id | IDフィルタ。処理するデータを絞り込む際に gml:id の値を複数指定可能。 | ||
| --extract | 空間IDが付与された CityGML から、空間IDを抽出し、CSVへ出力する場合に指定。 | ||
| --extrude | 2次元データに付与する高さの最小値と最大値(単位:m)。--extract オプション指定時のみ有効。 | ||
| --interpolate | 立体(Solid)内側の空洞をボクセルで埋める場合に指定。Solid形状を持つ「Building(建築物)」「CityFurniture(都市設備)」「Vegetation(植生)」を空間IDに変換する際に使用するオプション。 | ||
| --merge | 上位の空間IDに統合(最適化)する場合に指定。 | ||
| --debug | デバッグログ出力および一時ファイル保持を有効にする場合に指定。 | ||
| -h | 使い方を表示。 |
使用例5:2次元の空間ID(地理院タイル(XYZタイル))が付与されたCityGMLファイルから空間IDを抽出し、3次元の空間ID(ZFXYタイル)を生成する
$python citygml2id.py ../examples/citygml/udx/urf/urf_yoto_sample.gml ../examples/citygml/udx/urf/spatialid/urf_yoto_sample_zl20_3D.csv --grid-type zfxy --extract --extrude -10.0 100.0
※ examplesディレクトリのサンプルデータで動作を確認できます。事前に使用例2と使用例4を実行しておいてください。
※ 本ドキュメントでは開発サーバを用いた手順に限定します。運用環境では Apache や Nginx 等の Web サーバと mod_wsgi や uwsgi 等の WSGI 準拠ミドルウェアを組み合わせてデプロイすることを推奨いたします。
コマンドプロンプト(Windows)またはターミナル(macOS / Linux)を起動し、ツールのディレクトリに移動します。
Windows の場合
> cd web
macOS / Linux の場合
$ cd web
Python 仮想環境を有効化します。
Windows の場合
> .venv\Scripts\Activate
macOS / Linux の場合
$ source .venv/bin/activate
開発サーバを起動します
Windows の場合
> flask --app server run
macOS / Linux の場合
$ flask --app server run
Webブラウザでビューアのトップページを開きます。URLは以下の通りです。

データアップロード
3D都市モデル、空間IDの順にアップロードします。

データ確認
チェックボックスで3D都市モデルや空間IDの表示を切り替えることができます。

3D都市モデルや空間ID(ボクセル)をクリックすると属性情報が表示されます。

※ 3D都市モデル、空間IDの順にアップロードした場合、空間IDのメタデータに3D都市モデルの属性情報が付与されます。
※ ビューアで表示する3D都市モデルは、FME Hubで公開されているFMEワークスペースPLATEAU2可視化用データ変換によっ��変換されたCesium 3D Tiles データセット (3Dモデル) または Mapbox Vector Tile (MVT) データセット (2Dポリゴン)を使用します。JSON属性にgml:idが記録されていない場合は、このワークスペースを編集し出力してください。
バッチファイルを用意し複数のコマンドを連続処理することができます。 examplesディレクトリにサンプルデータ(建築物と用途地域)と、バッチファイルのサンプルを用意しています。 ツールをセットアップしたcommandフォルダ直下で、Python仮想環境を有効化し、../examples/example.batを実行してください。
※ 使用例2、使用例4及び使用例5を連続して実行するバッチファイルです。