tpc28-1

TOPIC 28|Pythonで活用する:基本編|PlateauKit+PlateauLabで始めるPLATEAU[1/2] |PLATEAUデータセットのインストール

Python は、プログラミング入門から世界的な Web サービスまで、広く利用されているプログラミング言語
のひとつです。このトピックでは、PLATEAU の 3D 都市モデルや属性情報を扱うための Python 用ライブ
ラリである PlateauKit と、PlateauKit に統合されている JupyterLab や Jupyter Notebook で 3D 都市モデル
を扱うためのさまざまな機能(PlateauLab)を使って、PLATEAU を Python で活用する方法を解説しま
す。

Share

Pythonは、プログラミング入門から世界的なWebサービスまで、広く利用されているプログラミング言語のひとつです。このトピックでは、PLATEAUの3D都市モデルや属性情報を扱うためのPython用ライブラリであるPlateauKitと、PlateauKitに統合されているJupyterLabやJupyter Notebookで3D都市モデルを扱うためのさまざまな機能(PlateauLab)を使って、PLATEAUをPythonで活用する方法を解説します。

このトピックの内容は「PlateauKit+PlateauLab を活用して Python で 3D 都市モデルをインタラクティブに扱う」(2024 年度 PLATEAU Hands-on アーカイブ動画)でもハンズオン形式で紹介しています。

【目次】

28.1   このトピックの見どころ

28.2   PlateauKit+PlateauLabとは

 28.2.1 準備:Google Colabの利用

 28.2.2  Google Colabを開く

 28.2.3  ノートブックの基本概念と基本操作

 28.2.4 PlateauKit+PlateauLabのインストール

28.3   PLATEAUデータセットのインストール 

 28.3.1 利用可能なPLATEAUデータセット(都市)一覧の表示(listコマンド)

 28.3.2 PLATEAUデータセット(都市)を指定してインストール(install / prebuildコマンド)

 28.3.3 データの内容や属性の確認(infoコマンド)

28.4   範囲選択と3D都市モデルの表示 

 28.4.1 PLATEAUデータセットの読み込み

 28.4.2 範囲選択と3D都市モデルの表示

28.1 _ このトピックの見どころ

PlateauKitは、PythonからPLATEAUの3D都市モデルを簡易に扱うためのライブラリです。3D都市モデルのダウンロードや読み込み、範囲を指定して切り出すなどの操作ができます。データは、Pythonによるデータ分析でよく使われるPandasや、PandasをGISデータ分析向けに拡張したGeoPandasのデータフレームとして読み込めるので、さまざまな分析が可能です。PlateauKitに統合されている、JupyterLabやJupyter Notebookで3D都市モデルを表示したり操作したりするためのさまざまな機能が「PlateauLab」です。 

このトピックでは、オンラインの開発環境であるGoogle Colaboratory上でPlateauKit+PlateauLabを使ってPLATEAUの3D都市モデルを読み込んで地図上に3D表示する方法、そしてそのデータの処理や分析をしたり、各種データ形式にエクスポートする方法を説明します。 

主な見どころは、次の2つです。

① データのインストール(ダウンロード・変換)/住所などに基づく指定範囲の切り出し/3D都市モデルの表示

まずは、PLATEAUの3D都市モデルを読み込む方法を説明します。このチュートリアルでは、PLATEAUの3D都市モデルの各都市のデータ群のことを「PLATEAUデータセット」と呼びます。PLATEAUデータセットは、使用前にあらかじめダウンロード・インストールしておく必要があります。 

そこではじめに、PLATEAUデータセットのインストールから、3D都市モデルの可視化、データフレーム(表)としての表示までの一連の流れを解説します。 

図28-1 PLATEAUデータセットを読み込んで3D地図として表示する 
図28-2 読み込んだPLATEAUデータセットを表形式で表示する 

PLATEAUの処理や分析、エクスポート 

PLATEAUの3D都市モデルから得られるさまざまなデータを処理・分析したり、CSVやExcel形式、またGeoJSONやCityJSONといった形式でエクスポートする方法を解説します。 

図28-3 読み込んだデータを分析してグラフ化する
図28-4 条件に応じて色分けして3D地図を表示する

また、TOPIC 29「Pythonで活用する:応用編 |PlateauKit+PlateauLabを用いたAI連携とアプリ構築」では、3D都市モデルの応用的な使い方として、AIとの連携やJupyterLabやJupyter Notebook上でのアプリ構築の方法について解説します。

28.2 _ PlateauKit+PlateauLabとは

PlateauKitは、ポピュラーなプログラミング言語のひとつであるPythonを使ってPLATEAUの3D都市モデルを扱うためのライブラリとコマンドライン(CLI)ツールです。コマンドラインツールからは、PLATEAUの3D都市モデル(PLATEAUデータセット)のインストールや管理、情報の表示が可能です。 

また、PlateauKitは、インタラクティブなPython開発環境であるJupyterLabやJupyter Notebook上で3D都市モデルを表示・操作できる機能(PlateauLab)も備えています。

PlateauKit+PlateauLabはMITライセンスで公開されているオープンソースソフトウェアです。PLATEAUのCityGMLデータをPythonで処理するためのさまざまな実装に興味のある方は、PlateauKit+PlateauLabのソースコードもチェックしてみてください。

【PlateauKit+PlateauLab】

GitHubページ
https://github.com/ozekik/plateaukit

公式ドキュメント 
https://ozekik.github.io/plateaukit/  

【メモ】

PlateauKit+PlateauLabは執筆時点においてアクティブに開発されており、本チュートリアルの内容から変更が加わっている場合があります。最新の情報については、PlateauKit+PlateauLabの公式ドキュメントも参照してください。 

28.2.1 _ 準備:Google Colabの利用

このチュートリアルでは、開発環境としてGoogle Colaboratory(以下、Google Colab)を利用します。Google Colabは、Google社が提供する、JupyterLabをベースとしたオンラインの開発・実行環境です。特別なセットアップなしで、無償で利用できます。 

【メモ】

PlateauKit+PlateauLabはGoogle Colab以外の環境や方法でも使うことが可能です。このチュートリアルの内容のほとんどは、自分のコンピューター(ローカル環境)でJupyterLabを利用して進めることができます。また、Visual Studio Codeなどのテキストエディタを利用して、通常のPythonプログラムとして作成・実行することも可能です。 

【JupyterLabの公式ドキュメント】(英語) 
https://jupyterlab.readthedocs.io/en/latest/  

【Visual Studio Code】(英語) 
https://code.visualstudio.com/  

28.2.2 _ Google Colabを開く 

まず、Google Colabのページにアクセスします。Google Colabは基本無料で利用できますが、利用にはGoogleアカウントでのログインが必要です。未ログインの場合はログインするか、新しいアカウントを作成してください。

【Google Colab】 
https://colab.research.google.com/ 

【メモ】

Google Colabには有料のオプションやプランもあります。より高性能な実行環境が必要な場合には検討してみるとよいでしょう。

アクセス後、[ノートブックを新規作成]ボタンなどから新しいノートブックを作成します。Google Colabでは、ノートブックごとに新しい実行環境(ランタイム)が作成されます。実行環境は仮想的なコンピューターと考えることができます。一定時間何も実行されなかった場合などに実行環境はリセットされますが、ノートブックの内容は保存されます。

28.2.3 _ ノートブックの基本概念と基本操作

Google Colabでノートブックを開くと、次の図28-5に示す画面が表示されます。メイン部分に表示されているテキスト入力欄を「セル」と呼びます。画面上部のメニューか、各セルの下部にマウスポインタを重ねると表示される[+コード]や[+テキスト]のボタンをクリックすることで、セルを自由に追加・削除できます。

【メモ】

「コード」はプログラムを入力するセル、「テキスト」はテキストを入力するセルです。テキストのセルは文章などを書くときに使うもので、文字を装飾することもできます。

図28-5 Google Colabのノートブック画面

試しに、先頭のセルにコードを入力して実行してみましょう。以下のコードをセルに入力し、セル左部の実行ボタン(▶︎)をクリックするか、[Ctrl]+[Enter]を入力することで、コードが実行されます。

value = 1 + 2
value
図28-6 セルの実行結果(入力欄下部)

このように、最後の行の評価結果がセルの直後に表示されます。print関数などで出力した場合は、その間に出力が表示されます。実行を途中で停止するには、実行中に表示される停止ボタン(■)をクリックします。

【メモ】

ノートブックの作成直後や使用してから一定時間が経過した際に、最初のコード実行時に時間がかかる場合があります。これはサーバー側で実行環境の立ち上げと接続が行われるためです。

セルを削除するには、セル右上に表示されるメニューのゴミ箱アイコンをクリックするか、メニューバーの[編集]から[選択したセルの削除]をクリックします。

また、コードセルに「%」で始まる「マジックコマンド」や「!」で始まる「シェルコマンド」を入力・実行することで、Pythonのコード以外のコマンドを実行することもできます。

【メモ】

シェルコマンドで実行したコマンドの出力は、Google ColabやJupyterLab上では表示が崩れる場合があります。うまくいかない場合は、通常のターミナルで実行してみてください。ローカル環境では、デフォルトでインストールされているターミナルアプリなどが利用できます。Google Colab環境では、左下の[ターミナル]からターミナルを起動できますが、Google Colabの有償版(Colab Pro)でのみ利用可能です。

28.2.4 _ PlateauKit+PlateauLabのインストール

まず、PlateauKitをGoogle Colabの環境上にインストールしましょう。PlateauKitは、pipコマンドを使ってPyPIから、「plateaukit」というパッケージ名でインストールできます。Google Colab上でインストールするには、コードセルに次のようにマジックコマンド(「%」で始まるコマンド)を入力して実行します。

・ 最新版をインストールする場合

%pip install -q 'plateaukit[all]'

・ バージョンを指定してインストールする場合(執筆時点の最新版をインストールする場合)

%pip install -q 'plateaukit[all]==0.17.3'

インストールが完了すると、次のように表示されます。

図28-7 PlateauKitのインストールが完了した画面

【メモ】

”ERROR: …” というメッセージが表示されても、インストールは完了している場合があります。一度次のステップまで進んでみてください。

28.3 _ PLATEAUデータセットのインストール

PlateauKitをインストールしたら、使いたい都市の3D都市モデル(PLATEAUデータセット)を一覧から探してインストールします。

28.3.1 _ 利用可能なPLATEAUデータセット(都市)一覧の表示(listコマンド)

まず、PLATEAUデータセットの一覧を表示してみましょう。新しいコードセルを追加して、シェルコマンド(「!」で始まるコマンド)を次のように入力します。

!plateaukit list

実行すると、次のように一覧が表示されます。

図28-8 PLATEAUデータセット一覧の表示 

一覧の項目名と説明は以下のとおりです。

項目名説明
idデータセットID
nameデータセット(都市)名
versionデータセットの更新年度
specPLATEAU CityGMLの仕様バージョン
homepage配布ページのURL
表28-1 PLATEAUデータセット一覧の内容

【メモ】

listコマンドで表示されるPLATEAUデータセットの一覧は手作業で更新されているため、最新のものでない場合があります。PlateauKitをアップデートしても、利用したいPLATEAUデータセットが一覧に含まれていない場合は、別途、G空間情報センターなどからPLATEAUの3D都市モデル(CityGML)をダウンロード後、後述のコラム「その他のインストール方法とアンインストール方法」を参照ください。また、未更新のPLATEAUデータセットがあるなど、気づいた点があればGitHubなどからお知らせください。

28.3.2 _ PLATEAUデータセット(都市)を指定してインストール(install / prebuildコマンド)

次に、使いたい都市のPLATEAUデータセットをインストールします。ここでは例として、東京都渋谷区のPLATEAUデータセットをインストールしてみましょう。PLATEAUデータセットのインストールには、コマンドラインのinstallコマンドを利用します。

listコマンドで表示したPLATEAUデータセット一覧から東京都渋谷区を探すと、渋谷区のデータセットIDは「plateau-13113-shibuya-ku-2023」であることがわかります。

セルを追加して、次のコマンドを実行します。

!plateaukit install plateau-13113-shibuya-ku-2023

このコマンドを実行すると、まずPLATEAUデータセットがダウンロードされ、続けて事前変換(事前ビルド)が行われます(図28-9)。所要時間は通信環境やコンピューターの性能に依存しますが、Google Colabでの目安は10分程度です(より高性能なマシンでは所要時間が短縮されます)。

図28-9 PLATEAUデータセットのダウンロードとインストール完了後の画面

【メモ】

ファイルのサイズ・通信環境や、変換の実行環境によっては、ダウンロードと事前変換に時間がかかります。大きいファイルをダウンロードする場合には、通信量にも注意してください。
また、Google Colabではなくターミナルを利用する場合は、`-v`オプションをつけて実行することでインストールの詳しい進み具合を確認できます。

PLATEAUの3D都市モデルには、「建築物(bldg)」「橋梁(brid)」「地形(起伏)(dem)」「洪水浸水想定区域(fld)」「都市設備(frn)」「土砂災害警戒区域(lsld)」「土地利用(luse)」「道路(tran)」「都市計画決定情報(urf)」などの都市オブジェクト(地物)が含まれています。ただし、各都市の3D都市モデルに実際にどの都市オブジェクトが含まれているかは、都市ごとや3D都市モデルの更新年度ごとで異なります。特定のPLATEAUデータセットで利用可能な都市オブジェクトは、一度インストールした後、後述するinfoコマンドで確認することができます。

PlateauKitでは、prebuild コマンドによる事前変換を行うことでこれらのデータを高速に扱う設計になっています。執筆時点のPlateauKit(バージョン0.17.3)では、「建築物(bldg)」「橋梁(brid)」「道路(tran)」の事前変換に対応しています。後述するGeoJSONやCityJSONへの変換など一部の機能を除き、データの読み込みや操作には事前変換が必要です(未変換の場合エラーが発生します)。

PLATEAUデータセットをインストールすると、デフォルトでは建築物(bldg)のデータのみが事前変換されます。道路(tran)や橋梁(brid)など、他の都市オブジェクトも利用したい場合は、インストール後にprebuildコマンドを実行して、再度事前変換を行います。対象の都市オブジェクトは、-tオプションで指定します。例えば、建築物、道路、橋梁を事前変換する場合には、セルを追加して次のコマンドを実行します。prebuildは、PLATEAUデータセットを再ダウンロードすることなく、何度でも実行できます。

【メモ】

Google Colabの標準環境では事前変換に再度10分程度の時間がかかります。このチュートリアルでは、bldg以外は使用しないので、スキップしてもかまいません。

!plateaukit prebuild plateau-13113-shibuya-ku-2023 -t bldg -t tran -t brid

【メモ】

利用可能な都市オブジェクトはPLATEAUデータセットによって異なります。特定のPLATEAUデータセットで利用可能な都市オブジェクトは、一度、インストールした後、後述するinfoコマンドで確認できます。

コラム:その他のインストール方法とアンインストール方法

■ ダウンロード済みの3D都市モデルからのインストール

事前にG空間情報センターなどからPLATEAUの3D都市モデルのCityGMLファイルをダウンロードしておき、それを利用することも可能です。その場合は、以下のように--localオプションにダウンロードした3D都市モデルを格納したディレクトリ(フォルダ)を指定してインストールします(データセットIDには、listコマンドで表示できるPLATEAUデータセット一覧から、対応する都市のデータセットIDを指定してください。執筆時点のPlateauKit(バージョン0.17.3)では、PLATEAUデータセット一覧に含まれるデータセットIDのみが指定可能です)。

!plateaukit install <データセットID> --local <ディレクトリの場所> --format citygml

PLATEAUデータセットのアンインストール (uninstallコマンド)

PLATEAUデータセットをアンインストールするには、uninstallコマンドを実行します(-yオプションはGoogle ColabやJupyter環境以外では不要です)。

!plateaukit uninstall <データセットID> -y

28.3.3 _ データの内容や属性の確認(infoコマンド)

PLATEAUのデータセット(そしてその元となっているPLATEAUの3D都市モデル)は、都市ごとに、含まれている都市オブジェクトや属性が異なります。指定したPLATEAUデータセットにどのような都市オブジェクトや属性が含まれているかを確認するには、infoコマンドを使います。

インストールした渋谷区のPLATEAUデータセットの情報を表示してみましょう。新しいセルを追加して、次のコマンドを実行します。

!plateaukit info plateau-13113-shibuya-ku-2023

このコマンドを実行すると、PLATEAUデータセットをスキャンして順次情報を表示します。中断する場合はセルの実行停止ボタン(■)を押してください。各項目の内容については、3D都市モデル標準製品仕様書も参照してください。

【3D都市モデル標準製品仕様書】
https://www.mlit.go.jp/plateaudocument/ 

図28-10 infoコマンドの実行例(東京都渋谷区)
コラム:設定情報の表示(configコマンド)

PlateauKit+PlateauLab自体の設定やファイルの保存場所を表示するには、configコマンドを利用します。

!plateaukit config

28.4 _ 範囲選択と3D都市モデルの表示

PLATEAUデータセットを準備したら、それを読み込んで表示できます。その一連の手順を説明します。

28.4.1 _ PLATEAUデータセットの読み込み

さっそく、インストールしたPLATEAUデータセットをPythonのコード上で読み込んでみましょう。PlateauKit のload_dataset関数の引数に利用するデータセットIDを指定することで、読み込みが可能です。

コードセルを追加して、次のように入力・実行します。

from plateaukit import load_dataset
dataset = load_dataset("plateau-13113-shibuya-ku-2023")
dataset

図28-11のように表示されれば成功です。読み込まれたPLATEAUデータセット(このコードではdataset変数)を、以下では「データセット(Dataset)オブジェクト」と呼びます。

図28-11 セルの実行結果

28.4.2 _ 範囲選択と3D都市モデルの表示

次に、データセットオブジェクトから範囲を選択して、実際に3D都市モデルを3Dで表示してみます。

■ 範囲選択

データセットオブジェクトから範囲を選択するには、いくつかの方法があります。ここでは、①指定した住所の周辺範囲を選択する方法、②ランドマークの名称から周辺範囲を取得する方法、③座標から範囲を選択する方法を紹介します。

① 指定した住所の周辺範囲を選択する

指定した住所周辺の範囲を選択するには、データセットオブジェクトのarea_from_address()メソッドを使います。area_from_address()メソッドでは、指定した住所の経緯度を中心とした範囲(デフォルトでは1000m四方)が切り出されます。ここでは、渋谷駅の住所を指定してみます。セルを追加して、以下のコードを実行します。得られた選択範囲(ここではarea)を、以下では「範囲(Area)オブジェクト」と呼びます。

from plateaukit import load_dataset
area = dataset.area_from_address("東京都渋谷区道玄坂1-1-1")
area

【メモ】

住所から座標への変換にはnormalize-japanese-addressesライブラリを内部的に利用しています。

選択範囲の広さを変更するには、size 引数に「南北方向の幅」と「東西方向の幅」の組をメートル単位で指定します(住所による範囲選択以外でも同様です)。

from plateaukit import load_dataset

# 400m x 800m の範囲を取得
area = dataset.area_from_address("東京都渋谷区道玄坂1-1-1", size=(400, 800))
area

② ランドマークの周辺範囲を選択する

駅や著名な建物などのランドマークを指定して、その周辺の範囲を選択するには、データセットオブジェクトのarea_from_landmark()メソッドを使います。area_from_landmark()メソッドでは、指定したランドマークの経緯度を中心とした範囲(デフォルトでは1000m四方)が切り出されます。セルを追加して、以下のコードを実行します。

from plateaukit import load_dataset

area = dataset.area_from_landmark("渋谷駅")
area

【メモ】

ランドマークの情報はWikidataから検索・取得しています。Wikidataのサービス状況やアクセス制限によっては利用できない場合があります。

③ 座標から範囲を選択する方法

座標を指定して範囲を選択するには、データセットオブジェクトのarea_from_bbox() メソッドを使います。引数の指定形式は以下のとおりです。

area_from_bbox([<範囲左上の経度>, <左上の緯度>, <右下の経度>, <右下の緯度>])

セルを追加して、以下のコードを実行します。

area = dataset.area_from_bbox([139.69847711477814, 35.66043149806784, 139.70555841571928, 35.654637310350566])
area

また、データセットオブジェクトのget_area()メソッドを使うことで、全範囲を選択することもできます。ただし、渋谷区のように範囲が大きい場合には、処理が重くなったり、選択に失敗したりする場合があるので注意してください。

area = dataset.get_area()
area

範囲を選択するその他の方法については、PlateauKit+PlateauLabの公式ドキュメントを参照してください。

■ 3D都市モデルの表示

次に、選択した範囲の3D都市モデルを表示してみましょう。範囲オブジェクトのshow()メソッドを使って、JupyterLab(ここではGoogle Colab)上で3D都市モデルをプレビューすることができます。セルを追加して、次のコードを実行してみましょう。

area = dataset.area_from_landmark("渋谷駅")
area.show()

デフォルトでは、LOD1相当の建築物をマップ上に表示できます(図28-12)。

【メモ】

デフォルトの表示エンジンは、本チュートリアルの執筆時点ではLOD1相当の建築物の表示のみに対応しています。後述するLOD2以上のモデルに対応したThree.jsベースの表示エンジンを使うことで、LOD2の建築物をはじめ、道路や橋梁も表示可能です(コラム「建築物・都市オブジェクトのLOD2表示」を参照)

【メモ】

PlateauKitのデフォルトの表示エンジンでは、建築物のLOD0形状(上から見た平面投影形状)と高さ情報(measuredHeight:計測高さ。計測により取得した建築物の地上の最低点から最高点までの高さ)を組み合わせて得られる立体形状を「LOD1相当」の建築物として表示しています。
PLATEAUの建築物モデルLOD1の立ち上げ高さには、建物の高さの中央値を用いることを原則としているため(コラム「LOD1モデルの建物の高さ」を参照)、高さが異なる場合があります。

図28-12 渋谷駅周辺を表示した様子

マップをドラッグすると、表示位置を移動することができます。拡大縮小するにはトラックパッドやマウスホイールでスクロールします。表示方向を回転するには、[Shift]キーを押しながらドラッグします。

マップ上の建築物にマウスポインタを重ねると、その建築物のID(PLATEAU CityGMLにおける「uro:buildingID」の値、名称情報が存在する場合は名称)が表示されます。クリックすると、その建築物を選択することができます。

【メモ】

通常のJupyterLabやJupyter Notebookでは、建築物をクリックすると、選択した建築物の情報がマップの下に表示されます。ただし、仕様の違いによりGoogle Colabでは動作しない場合があります。

選択中の建物の情報は、コード上でも取得することができます。セルを追加して、次のコードを実行してみましょう。取得したオブジェクトは、次節で解説するデータフレームとして構成されています。

area.selection.gdf
図28-13 選択中のオブジェクトの情報を取得する
コラム:建築物・都市オブジェクトのLOD2表示

PlateauKit+PlateauLabの3D都市モデル表示機能は、LOD1のモデル表示に対応するDeck.glベースのデフォルトの表示エンジンだけでなく、LOD2以上のモデルの表示に対応したThree.jsベースの表示エンジン(CityView)も実験的に実装しています。

 範囲オブジェクトのshow()メソッドの引数にrenderer="cityview"を指定することで、LOD2の建築物や橋梁などの都市オブジェクトを表示することができます。本チュートリアルの執筆時点のPlateauKit (バージョン0.17.3) では色分けなどの処理には未対応ですが、今後実装予定です。

area = dataset.area_from_landmark("渋谷駅")
area.show(renderer="cityview")
図28-14 LOD2で表示した例(建築物・道路・橋梁を事前変換している場合)

【文】

小関 健太郎

【協力】

大澤文孝