TOPIC 27|3D都市モデルに別の地理空間情報を紐づけて利活用する[1/2]│PLATEAU DataLinkerの紹介と実例
このトピックでは、PLATEAUの3D都市モデルのデータに地方公共団体や企業などが独自に公開している地理空間情報を紐づけて、地理空間情報の検索や分析に利活用する方法を解説します。
PLATEAUには、「建物名」「高さ」「土地利用」「災害リスク」などのさまざまな地理空間情報が格納されています。一方、地方公共団体や企業が独自に公開している地理空間情報もあります。これらを紐づければ、検索や分析の幅が広がります。それを実現するのが「PLATEAU DataLinker」です。
このトピックの内容は「PLATEAU DataLinkerを活用した3D都市モデルへの地理空間情報紐づけと活用法」(2024年度PLATEAU Hands-onアーカイブ動画)でもハンズオン形式で紹介しています。
前半では、PLATEAU DataLinkerとは何かという説明と、PLATEAU DataLinkerを使った紐づけの実例を紹介します。
【目次】
27.2.1 PLATEAU DataLinkerを使うには
27.3 PLATEAU DataLinkerを使った紐づけの実例
27.3.3 PLATEAU DataLinkerで紐づける
27.1 _ このトピックの見どころ
このトピックでは、PLATEAUの3D都市モデルのデータに地方公共団体や企業などが独自に公開している地理空間情報を紐づけて、地理空間情報の検索や分析に利活用する方法を解説します。
主な見どころは、以下のとおりです。
■ PLATEAU DataLinkerとは
PLATEAU DataLinkerは、PLATEAUの3D都市モデルのデータと他の地理空間情報とを紐づけるツールです。紐づけたデータは、CityGML形式だけでなくCSV形式にも出力できるため、GIS以外にもさまざまなツールで利活用できます。
まずはPLATEAU DataLinkerの概要ならびに特徴、そして活用できる場面を紹介します。
■ PLATEAU DataLinkerを使った紐づけの実例
PLATEAU DataLinkerを使ってPLATEAUの3D都市モデルのデータに他の地理空間情報を紐づけるには、あらかじめ決まった書式に変換しておく準備が必要です。
こうした準備も含めて、実際にデータを紐づけるにはどのような操作が必要なのか、実例とともにその流れを解説します。
■ CSV出力を利用してノーコードでスマホアプリを作る
PLATEAU DataLinkerを使った実例を2つ紹介します。
1つめは、CSV出力の活用例です。地理空間情報を活用したアプリは複雑になりがちですが、CSVデータとして扱えば、「ノーコード」というまったくコードを記述しない方法でも実装できます。
実例として、Glide(グライド)というノーコードでスマホアプリが開発できるツールを利用し、「授乳室がある建物を表示するアプリ」を作ります。
■ 紐づけられたCityGMLをUnityで活用する
2つめの実例はCityGML出力の活用例です。PLATEAUの3D都市モデルに地方公共団体から提供される別の地理空間情報を紐づけて、それをプログラムから読み込んで活用する方法を説明します。
実例として、「低層階に車椅子対応トイレがあるビル」を視覚化するUnityプログラムを作ります。車椅子対応トイレの場所(経緯度)は、地方公共団体から地理空間情報として提供されています。一方、PLATEAUの3D都市モデルは「高さ」の情報を持っているため、これらを組み合わせることで「低階層に車椅子対応トイレがあるか」がわかります。この実例では、該当の建物を青色で表示します。
27.2 _ PLATEAU DataLinkerとは
PLATEAU DataLinkerは、PLATEAUのCityGML形式の3D都市モデルに別の地理空間情報を紐づけて出力する機能を持つ、オープンソースで開発されているツールです。
27.2.1 _ PLATEAU DataLinkerを使うには
PLATEAU DataLinkerはインストールする必要はなく、下記のページにアクセスすればすぐに利用できます(図27-3)。
【PLATEAU DataLinker】
https://project-plateau.github.io/PLATEAU-DataLinker/
【メモ】
ソースコードをダウンロードし、ローカルな環境で実行することも可能です。HTML+JavaScriptで作られているため、ブラウザで開けばすぐに動きます。実行のための環境を用意する必要はありません。
27.2.2 _ PLATEAU DataLinkerの動き
具体的な操作方法は後述しますが、左側の「①PLATEAU」の枠で「PLATEAUのCityGMLファイル」を選択し、右側の「②紐づけたいデータ」の枠で「紐づけたいデータが格納されたファイル」を選択します。そして「③『紐づけたいデータ』から追加したい属性を選択し、属性名を記入してください」の部分で、追加したい項目を設定すれば、紐づけられたファイルをダウンロードできます。
右側の「②紐づけたいデータ」として選択できるファイルフォーマットは表27-1、対応出力フォーマットは表27-2のとおりです。PLATEAU DataLinkerの動きを図27-4に示します。
【メモ】
対応する文字コードは、入力・出力ともに「UTF-8」です。Shift_JISなどは使えないので注意してください。
入力フォーマット | 意味 |
---|---|
GML | CityGML形式のファイル |
XML | 任意のXML形式のファイル |
CSV | 任意のCSV形式のファイル |
JSON | GeoJSON形式、または任意のJSON形式のファイル |
出力フォーマット | 意味 |
---|---|
GML | CityGML形式。元のCityGMLファイル(PLATEAU DataLinkerの左側の枠「①PLATEAU」で設定したファイル)と同じフォーマット |
CSV | CSV形式。どの列を出力するのかを指定できる |
27.2.3 _ マッチングと属性
PLATEAU DataLinkerは、PLATEAUの3D都市モデルのうち、建築物モデル( bldg フォルダに格納されているもの)を対象としたツールです。一言で言えば、建築物モデルに含まれるそれぞれの地物について紐づけ対象をマッチングし、そのマッチングした項目をCityGMLの属性値として追加できます(図27-5)。
■ マッチング条件
「地物」と「紐づけたいデータ」は、PLATEAU DataLinkerのUIにおいて設定する「キー」を基に紐付けられます。キーは、「CityGMLの任意の属性名」と「紐付けたいデータの項目名」の組み合わせを1つ指定します。主なキーを表27-4に示します。
キーが「経緯度」か「それ以外」かで、マッチング条件が異なります。
【メモ】
PLATEAU DataLinkerのUIでは、読み込んだCityGMLに含まれる属性一覧が表示されるため、選択できるキーは対象のCityGMLファイルによって異なります。原則として、「建物の座標(緯度、経度)」以外はすべて完全合致のマッチングです。
① 経緯度の場合
属性が「建物の座標(緯度、経度)」(PLATEAUの属性名はgml:postList)の場合は、その地物の座標が内包されているかどうかで、マッチングします。
このマッチングを用いる場合、紐づけ対象の列は、表27-3の書式でなければなりません。
ファイルフォーマット | 書式 |
---|---|
GML | <gml:posList>緯度 経度 高さ</gml:posList>のように「経度」と「緯度」と「高さ」をスペースで区切った書式。なお、高さは使用しない |
XML | <座標>緯度 経度</座標>のように「経度」と「緯度」をスペースで区切った書式 |
JSON | [経度, 緯度]の書式の配列 |
CSV | 「緯度 スペース 経度」もしくは「経度 スペース 緯度」のように「緯度」と「経度」をスペースで区切った書式(緯度、経度の順序はどちらでも可) |
② 経緯度以外の場合
項目の値が完全に合致するかでマッチングします。例えば、「建物の住所(xAL:LocalityName)」がマッチするかどうかを指定すれば、住所を基に紐づけることができます。
項目 | PLATEAUの属性名 | 解説 |
---|---|---|
建物の座標(緯度、経度) | gml:posList | 経緯度。座標系は対象のCityGMLの平面直角座標。結びつける先が、建物のポリゴンの内部にあれば紐づけられる(交差数判定アルゴリズム) |
GML ID | gml:id | 地物に設定される、該当ファイル上で唯一無二の地物ID(PLATEAUの公開年度によって、同一の建物でも値が変わることがある) |
建物ID | gen:stringAttribute name="建物ID" | 建物に設定される唯一無二のID(同一の建物であれば年度が変わっても、この値は変わらない) |
建物の高さ(m) | bldg:measuredHeight | 計測により取得した建物の地上の最低点から最高点までの高さ。単位はメートル |
建物の住所 | xAL:LocalityName | |
13_区市町村コード大字・町コード町・丁目コード | gen:stringAttribute name="13_区市町村コード+大字・町コード+町・丁目コード" | 全国地方公共団体コード。https://www.soumu.go.jp/denshijiti/code.htmlを参照 |
大字・町コード | gen:stringAttribute name="大字・町コード" | |
町・丁目コード | gen:stringAttribute name="町・丁目コード" |
■ 属性値と型
見つかった紐づけデータは属性として、元のCityGMLに追加されます。このとき、属性に任意の名前を付けることができます。
【メモ】
追加する属性は、「文字列型(gen:StringAttribute)」として追加されます。
【メモ】
元のCityGMLに同名の属性がある場合は、紐づけたデータによって上書きされます。
27.2.4 _ PLATEAU DataLinkerの使い道
このようにPLATEAU DataLinkerは、既存のCityGMLデータに存在しない属性を別のファイルから読み込んで、設定したキーのマッチングに基づいて追加するツールです。それだけでなく、出力としてCSV形式も選択できるため、次のような活用法が考えられます。
① PLATEAUに足りないデータを追加する
1つめは、PLATEAU DataLinkerの主たる目的である「別のデータを紐づけて属性値として追加できる機能」を活用する方法です。
地方公共団体や企業は、さまざまな地理空間情報を公開しています。近年はオープンデータ化の流れもあり、各中央省庁や地方公共団体がまとめた「データカタログサイト」などから、入手もしやすくなっています。
こうした地理空間情報を単体で使うこともできますが、PLATEAUの3D都市モデルには、建物の「高さ」や「用途」「形状」、地域によっては洪水や津波などが発生したときの浸水想定区域などのデータも収録されています。これらと組み合わせることで、より高度な分析・可視化、シミュレーションなどが実現できます。
【データカタログの例】
----------------
・BODIKオープンデータカタログサイト
・e-Govデータポータル
https://data.e-gov.go.jp/info/ja
・東京都オープンデータカタログサイト
https://portal.data.metro.tokyo.lg.jp/
----------------
② CSV形式で出力して活用する
もう1つの使い方は、CSV出力を活用した方法です。地理空間情報を扱うソフトウェアは専門的なものも多く、誰もが使い慣れているわけではありません。
しかし必要なデータを紐づけた後にCSV形式で出力すれば、Excelなどで編集ができるようになり、地理空間情報の扱いに慣れていない人でも操作できるようになります。
27.3 _ PLATEAU DataLinkerを使った紐づけの実例
ここからは実際にPLATEAU DataLinkerを使って、PLATEAUの3D都市モデルのCityGMLに地方公共団体や企業などが提供する地理空間情報の紐づけ方法を説明します。
27.3.1 _ 紐づけるデータの準備
ここでは例として、次節の実例で用いる「授乳施設」のデータの紐づけ方法を見ていきます。
紐づけに使用するのは、東京都オープンデータカタログから入手できる「おむつがえ・授乳施設一覧(町田市)」です。
【おむつがえ・授乳施設一覧(町田市)】
https://catalog.data.metro.tokyo.lg.jp/dataset/t132098d0000000105
■ 内容の確認とダウンロード
このデータは、CSV形式で提供されています。東京都オープンデータカタログでは、[探索]―[プレビュー]をクリックするとその内容が確認できます。データには、授乳施設に関する「EPSGコード」「経度」「緯度」「施設名」「住所」「電話番号」「関連リンク」が含まれていることがわかります(図27-9)。
【メモ】
EPSGコードとは、座標参照系(経緯度による指定か、もしくはある基準位置からのメートル単位でのX座標、Y座標によるものなのかなど、座標の決め方)に付けられたコード番号です。今回の例として出てきている「EPSG:6668」は、PLATEAUで使われるのと同じEPSGで、経緯度に基づく座標系です。日本国内で提供されている経緯度のデータは、EPSG:6668が使われていることがほとんどですが、他の座標参照系であるときは、PLATEAU DataLinkerで処理する前に、あらかじめEPSG:6668に変換しておく必要があります。
プレビューを確認したら、このCSVファイルをダウンロードしてください。ダウンロードするには、このページの「URL」の部分を右クリックして[名前を付けてリンク先を保存]を選択する、もしくは前のページに戻って、[探索]―[ダウンロード]を選択します(前掲の図27-8)。
以降の手順では、この授乳施設に関する情報を「経度」「緯度」に基づいてマッチングすることで、PLATEAUの「建物」と紐づけます。そうすると、建物に授乳施設があるかどうかがわかるようになります(図27-10)。
■ 経緯度の形式をPLATEAU DataLinkerが要求する形式に合わせる
PLATEAU DataLinkerで紐づける場合、紐づけ対象のファイル(今回の場合はダウンロードした授乳施設のデータ)をPLATEAU DataLinkerが扱える形式に変換しなければなりません。
CSV形式の場合は、次の要件が必要です。
----------------
① UTF-8であること
②「経度」と「緯度」が、「経度 スペース 緯度」(または「緯度 スペース 経度」)のようにスペースで区切られていること
----------------
上記の要件を満たすように、次の手順でダウンロードした授乳施設のCSVデータを整えていきます。
【手順】PLATEAU DataLinkerで扱えるように変換する
[1]Excelで開く
ダウンロードしたCSV形式ファイルをExcelで開きます。
ExcelがPCにインストールされている環境であれば、CSV形式ファイルをダブルクリックすれば開けますが、ここではそうしません。その理由は、CSV形式の文字コードによっては、文字化けして正しく読めないことがあるためです。
正しく開くためには、まずExcelを起動して空白のブックを作成します。
そして、[データ]リボンの[テーブルの取得と変換]にある[テキストまたはCSVから]をクリックしてCSVファイルをインポートします。するとプレピューが表示されます。プレビュー画面では、左上のドロップダウンリストから文字コードを選べます。もし文字化けをしていたり列の区切りが正しくなかったりしたときは、文字コードや区切り記号を調整します。プレビューが正しくなったら、[読み込み]をクリックします。
[2]UTF-8で保存する
[ファイル]メニューから[名前を付けて保存]を選択して、ファイルを保存します。このとき、[ファイルの種類]で[CSV UTF-8(コンマ区切り)]を選択します。これで、文字コードがUTF-8のCSV形式ファイルとして保存されます。
[3]経度と緯度をひとつにまとめる
PLATEAU DataLinkerでCSVファイルと紐づける場合、経度と緯度の値は「経度 スペース 緯度」(または「緯度 スペース 経度」)の書式の列として構成しなければなりません。現状のデータは、「経度」と「緯度」が別の列となっているため、これをスペース区切りで結合します。
これにはいくつかの方法がありますが、コードや式などを書かずに簡易に変換できる方法として、ChatGPTを用いる方法を紹介します。
【メモ】
ChatGPTは、OpenAI社が提供する生成AIのサービスです。
ChatGPTを開き、保存したUTF-8形式のCSVファイルをドラッグ&ドロップでアップロードして、プロンプト(命令)として「CSVにある経度と緯度をマージしてください。数字はスペース区切りにしてください。それ以外のデータは、そのままにしてください」のように入力すると変換できます。
今回は、このように変換したCSV形式ファイルをダウンロードしたものを使います。変換したCSV形式ファイルは以下に示すように、もともとあった「経度」「緯度」が削除され、末尾に「経度緯度」という列としてスペース区切りのものが追加されたという前提で話を進めます。
【変換したCSV形式ファイル(文字コードはUTF-8)】
行,EPSGコード,施設名,住所,電話番号,関連リンク,経度緯度
1,EPSG:6668,子どもセンターただON,東京都町田市忠生1-11-1,042-794-6722,https://kosodate-machida.tokyo.jp/soshiki/4/2/10/tadaon_top.html,139.4219748 35.574259
2,EPSG:6668,子どもセンターつるっこ,東京都町田市大蔵町1913,042-708-0236,https://kosodate-machida.tokyo.jp/soshiki/4/2/10/tsurukko.html,139.4659195 35.58987883
…略…
コラム:ChatGPTを使わない方法
ChatGPTの結果は、常に同じとは限りません。時々思うように動作しなかったり、間違った結果となったりすることもあります。その場合は、指示の出し方を変えたりやり直したりしてください。
またChatGPTでは、大きなファイルは操作できません。今回、例として扱っているCSV形式ファイルは90行ほどの小さなものです。大きなデータを変換する場合は、Excelで式として定義するなどして対処してください。例えば、C列に「経度」、D列に「緯度」が入っているのであれば、新たに列を追加してその列に「=C2 & " " & D2」という式を入れると、生成できます。
27.3.2 _ 対象のPLATEAUの3D都市モデルの入手
以上で、紐づけるデータの準備ができました。続いて、PLATEAUの3D都市モデルを準備します。
今回準備した授乳施設のデータは東京都町田市のものなので、町田市の3D都市モデルを使います。
PLATEAUの3D都市モデルは、G空間情報センターの「3D都市モデル(Project PLATEAU)ポータルサイト」から入手できます。
町田市の3D都市モデルは下記にあります。このページから、町田市のCityGML形式をダウンロードします。
【3D都市モデル(Project PLATEAU)町田市(2023年度)】
https://www.geospatial.jp/ckan/dataset/plateau-13209-machida-shi-2023
ダウンロードしたZIPファイルを展開します。PLATEAU DataLinkerでは、建築物モデルのデータを使います。建築物モデルを構成するファイルは、展開したフォルダのudx/bldgフォルダに3次メッシュごとに分割して保存されています。
最終的には、全ファイルに対して処理するのですが、まずは、このファイルのうち「53392383_bldg_6697_op.gml」を使います。
【メモ】
「53392383_bldg_6697_op.gml」を使った理由は、事前の目視調査からです。授乳施設データのCSVに記載された施設名や経緯度を目視確認して地図と照らし合わせることで、該当施設がありそうな地域の3次メッシュを探しました。地図で見る統計(jSTAT MAP)では、地図上で3次メッシュを確認できます。3次メッシュの詳細については、「TOPIC 3|3D都市モデルデータの基本[1/4]|3D都市モデルの入手方法とデータ形式」を参照してください。
27.3.3 _ PLATEAU DataLinkerで紐づける
「PLATEAUの3D都市モデル」と「紐づけるデータ」の両方がそろったので、PLATEAU DataLinkerで、実際に紐づけていきます。
【手順】PLATEAU DataLinkerで紐づける
[1]PLATEAU DataLinkerを開く
ブラウザでPLATEAU DataLinkerのページを開きます。
【PLATEAU DataLinker】
https://project-plateau.github.io/PLATEAU-DataLinker/
【メモ】
GitHubからソースコードをダウンロードし、ローカルで実行してもかまいません。ローカルで実行するには、buildフォルダにあるindex.htmlをブラウザで開きます。
[2]PLATEAUの3D都市モデルを指定する
PLATEAU DataLinkerの左側の「①PLATEAU」の枠で、PLATEAUの3D都市モデルを指定します。ここでは、あらかじめ用意しておいた「53392383_bldg_6697_op.gml」をドラッグ&ドロップします。
ドラッグ&ドロップするとファイルが読み込まれて、「紐づける属性を選択」の欄にファイルに含まれている属性の一覧が表示されますが、これは次の手順[4]で指定するので今は何か選択する必要はありません。
[3]紐づけるデータを指定する
右側の「②紐づけたいデータ」の枠で、紐づけたいデータを指定します。あらかじめ「経度スペース緯度」の形式に変換しておいたUTF-8形式の授乳施設データのCSVファイルをドラッグ&ドロップします。
ドラッグ&ドロップすると、同じく「紐づける属性を選択」の欄にファイルに含まれている属性の一覧が表示されますが、これは次の手順[4]で指定するので何か選択する必要はありません。
[4]マッチング条件を指定する
左右の「紐づける属性を選択」で、どの項目同士をマッチングするのかを指定します。今回は、建物の位置と授乳施設をマッチしたいので、左側では「建物の座標(経度、緯度)」、右側では「経度緯度」(CSVファイル上で、経度と緯度をスペース区切りで設定してある列名)を指定します。
【メモ】
左側の「紐づける属性」上でマウスオーバーすると、CityGMLにおける属性名定義(表27-4のPLATEAUの属性名)を確認できます。
[5]追加したい属性を選択する
「③『紐づけたいデータ』から追加したい属性を選択し、属性名を記入してください」に、紐づけたいデータに存在する項目の一覧が表示されます。この中から追加したい属性にチェックを付けます。
今回は、「施設名」「住所」「電話番号」「経度緯度」にチェックを付けます。このとき[属性名]の部分に、CityGMLの属性として追加する際の属性名を入力します。ここでは、元のCSVの列名と同じものを指定しておきます。
[6]出力形式を選択して紐づける
出力形式は、[GML]もしくは[CSV]を選択できます。
・GMLを選択する場合
[GML]を選択して、[データを紐づける]をクリックすると、紐づけ後のデータをCityGML形式としてダウンロードできます。
・CSVを選択する場合
[CSV]を選択したときは、出力に含める列を指定する入力欄がさらに表示されます。ここにはCityGMLの属性がすべて表示されるので、出力したい列にチェックを付けて[CSVとして出力する]をクリックします。すると、CSV形式でダウンロードできます。
27.3.4 _ 紐づけたデータの確認
紐づけたCityGML形式のデータを何らかのGISで開けば、紐づけられたデータを確認できます。
例えば、QGISにドラッグ&ドロップして読み込んで属性テーブルを確認すると、授乳施設がある建物については、「施設名」「住所」「電話番号」「緯度経度」の値が設定されていることがわかります。
【メモ】
QGISに読む込む際は、「PLATEAU QGIS プラグイン」を使わずにドラッグ&ドロップその他の方法で、QGISで直接読み込んでください。PLATEAU QGISプラグインは、PLATEAU仕様以外の属性を読み込まないためです。
コラム:複数の行とマッチする場合
紐づけた結果、複数の行がマッチする場合には、マッチした分だけ<gen:stringAttribute>要素が出力されます。例えば建物の座標(緯度, 経度)でマッチングする際、その建物の内部に「コンビニA」と「郵便局X」が含まれる場合、次の2つの<gen:stringAttribute>要素が出力されます(nameはCSVの列名の例で、CSVデータによって異なります)。
<gen:stringAttribute name="name">
<gen:value>コンビニA</gen:value>
</gen:stringAttribute>
<gen:stringAttribute name="name">
<gen:value>郵便局X</gen:value>
</gen:stringAttribute>
CSV出力の場合は、name、name2のように、CSVの列名に連番が付けられた列で出力されます。
列1, 列2,…略…, name, name2
…, …, …, コンビニA, 郵便局X
【文】
米田将(HollowByte)
大澤文孝