入賞者&関係者が語るPLATEAU裏話 3D都市モデルの成果物への多様な落とし込み方
PLATEAU/CityGML座談会(前編)
国土交通省の主導するProject PLATEAU(プラトー)は、日本全国の3D都市モデルを整備・オープンデータ化し、活用を目指すプロジェクト。2021年3月に初のハッカソン(参考記事)を開催後、2021年度は7月17日に2回目のハッカソン「PLATEAU Hack Challenge 2021」(参考記事)を開催し、多彩な成果が発表された。今後のさらなるPLATEAUの活用を広げていくため、過去2回のPLATEAUハッカソンでのグランプリ・準グランプリ参加者と関係者による座談会を開催。開発のこだわりや苦労などを振り返りながら、3D都市モデルにおける技術的な課題などについて意見を交わした。この座談会の模様を前後編にわたってお届けする。
PLATEAUは、都市の3Dの地形情報と壁・屋根などの形状情報、そして建物用途や土地利用・災害リスクなどのさまざまな属性情報をいろいろなアプリケーションで使えるようにするためのプロジェクト。3D都市モデルの情報はテキストベースの「CityGML形式」で記述されており、アプリケーションに制約されないオープンな仕様となっているのが特徴だ。
座談会には、ハッカソン参加者代表として、第1回ハッカソンのグランプリ受賞チーム「影の功労者」の笹尾氏、準グランプリのチーム「Tokyo Survival」の奈良氏、第2回ハッカソンのグランプリ受賞チーム「ゴジラ」の米田氏と安黒氏、準グランプリのチーム「ナイスガイズ」の尾上氏と岡本氏の6名が参加。またテクニカルメンターの於保 俊氏と尾石 元気氏、CityGML仕様策定に携わった石丸伸裕氏と3D都市モデルの標準データ仕様策定に携わったアジア航測株式会社の黒川 史子氏、PLATEAUのプロジェクトを統括する国土交通省の内山 裕弥氏、株式会社角川アスキー総合研究所の遠藤 諭氏が参加した。
(以外、文中敬称略)
オープンデータとの相性が非常に良いCityGML
――PLATEAUが採用するCityGMLは、都市に存在する建物や街路、橋梁などのオブジェクトを地物として定義し、形状や名称、種類、建築年といったオブジェクトについての空間・時間・主題にかかわるすべての情報を地物の属性として定義しているデータ規格です。第1回のハッカソン開催時は、まだPLATEAUが公開されたばかりで、参加された皆さんもCityGMLに触るのは初めてだったかと思います。ハッカソンでは、どのようにプロダクトに落とし込んでいったのでしょうか。
笹尾:当時はまだCityGMLの生データしかないような状況だったので、まずはCityGMLを読み込みかつ表示するためのパーサー兼ビューワーを作って理解するところから始めました。現在はplateaupyとして公開しています。PLATEAUの生データはXML形式のテキストで書かれているので、読んで解析しながら、建物を表示するための仕組みを作っていったのが最初でした。やっているうちに、ここに人を歩かせたら面白いな、と人流シミュレーションになっていきました。
パーサー: プログラミング言語で記述されたソースコードを機械語に翻訳するコンパイルの工程で、構文解析をする機能のこと。パーザーともいう。構文解析では、ソースコードをツリー構造に変換し、コンピューターが処理をしやすいデータの形式にする。
影の功労者の開発した人流シミュレーション「都市SYM 〜人もデジタルツイン〜」
石丸:審査員として初めて作品を見たときは、正直すごく驚きました。CityGMLは海外ではよく使われており、オープンソースのプログラムもいろいろありますが、通常はしっかり時間をかけて開発されます。ハッカソンの短い時間であっという間にパーサーを作られて、しかもBlender上で見えるのは、非常に驚きました。しかも、道路のデータをそのまま使うのではなく、画像処理をして中心線を出し、人を動かしており、目的のためにデータを解析し、組み合わせて使っていたこともすごいと思います。
黒川:これだけの規模のXML形式のデータが世の中に出たのは、今までほとんどなかったと思います。CityGMLを選んだことで皆さんの興味を引いたのではないでしょうか。立体物の壁だけ使う、容積を使う、といったいろいろな情報の加工の仕方をしてくれたのが素晴らかったです。
於保:僕は第1回でハックする側として参加していたのですが、チームは3D Tilesに入っているGLBデータをハックしていたので、XMLのパーサーを作っている笹尾さんのチームを見て、すごいなと思っていました。テキストデータとしては、国交省が整備している国土数値情報のGMLや国土地理院の基盤地図情報のXMLデータなどが以前からありますが、PLATEAUではよりリッチなデータがオープンになっているのが面白い。それが実際にハッカソンで、サクッと作品に仕上がっていたのが素晴らしいと思いました。オープンソースとしてGitHubで公開されておりオープンデータとの相性が非常に良いので、今後も盛り上げていけるとよいと思います。
3D Tiles:3D建物、BIM/CAD、点群データ(ポイントクラウド)、地形データ、写真測量などの3次元地理空間コンテンツをストリーミング及びレンダリングするための空間データの構造とタイルフォーマットを定義した形式。軽量・最適化されたデータ形式のため、3DデータでもスムーズなWeb配信が可能であり、Cesiumで採用されている。分野や目的に適したフォーマットへの形式変換が王道
――「Tokyo Survival」の奈良さんはどうでしたか?
奈良:私たちも第1回のハッカソンでしたので、マニュアルや事例が出そろっていないなかでの開発でした。まず3D Tilesを使うか、CityGMLを使うのかでチーム内でも議論になったのですが、3D Tilesには座標変換の課題があり、思った場所にオブジェクトを表示するだけでも工数を使ってしまいます。あとはCityGMLが持っている建物などの属性情報をなるべく活用したかったのでCityGMLを使うことになりました。
メンバーにパーサーを作ってもらい、GeoJSONにいったん変換し、必要な属性や項目だけ抜き出して、PostGISに突っ込む、という多段変換をやっていきました。こうした変換を繰り返して、チームメンバーが慣れた形式に落とし込んだ結果、開発コストが安くなりましたし、基盤地図情報や東京都の公開しているオープンデータとの結合が容易になりました。PLATEAUが公開されたばかりの段階では、別形式に変換するのがベストな解だったように思います。
GeoJSON:JSONを使用してさまざまな地理データ構造をエンコードするためのフォーマット。属性として、オブジェクトのタイトルや説明、ポイントの⼤きさ・色、線の太さ・色などの情報を持つことができる。PostGIS: PostgreSQL データベースで地理空間情報を扱うための空間拡張を導入するオープンソースソフトウェア。
石丸:CityGMLを使うオープンソースもけっこうあるのですが、GeoJSONを選択されたのは、やはりCityGMLの日本語の情報が少ないからでしょうか。
奈良:どちらかというと、メンバーの持っているスキルを足し算した結果、この方式になりました。フロントエンドとしてMapbox(地図サービス開発プラットフォーム)を使っているんですよ。裏側でPostGISのデータを都度GeoJSONに変換して表に返す、というトリッキーなことをさせているので、ほかのミドルウェアとは少し相性が悪かったという事情があります。
黒川:CityGMLはその分野や目的に適したフォーマットに変換して使う、中間フォーマット的な位置付けでもあるので、このやり方は王道だと思います。
於保:とくにPostGISの採用は、この用途では最適な選択のひとつだと思います。CityGMLは、中間的なデータ交換のための形式としては非常に有効なのですが、システムに入れて使い始めるとそのままでは使いにくいという問題があります。パーサーはものすごく遅く、リアルタイムでは処理ができないほど。CityGMLのままでは、検索も非常に遅い。使い勝手の面から、間違いなく中間形式に落とすことが必要になります。GeoJSONを介してPostGIS、実際に動かすのはGeoJSONというのはよく考えられており、非常に理にかなっていると思います。
尾石:それぞれのハッカソンでは、どんなアイデアを、どのソリューションを軸にして、どのように組み合わせるかに時間がかかると思っていたので、参加者みなさんの組み合わせにすごく感心しています。私はハッカソンが始まる前に、PLATEAUと3rd partyのオープンデータを組合わせたサンプルの開発していました。東京都の都営バスのバスロケーションデータを都市モデルに表示し、立体的な都市でバスがどの辺りを走っているか、などを視覚的に見えるようにしたサンプルでしたが、都バスのバスロケーションデータを使うときにそのまま取り込めず、GFTSリアルタイムにバインディングするライブラリを作り、いったんCSVに変換してGeoJSONからCesiumに読ませるようにしたので苦労しました。
Cesium:3次元位置情報を活用するために設計されたソフトウェアの基盤となるオープンプラットフォーム。WebGLを利用しており、デスクトップ用あるいはスマートフォン用ブラウザで動作する。内山:黒川さん、GeoJSONについてはどのようにお考えですか。
黒川:GeoJSONは、それに特化した分野があります。ただし、CityGMLに比べて書き入れられる情報が少ない。CityGMLが100とすれば、60はGeoJSONで書けるが、残りの40は落ちてしまう。例えば、GeoJSONでは立体は描けず、ポリゴン止まり。複雑なデータモデルになると、GeoJSONでは難しい。やりたいことによりますね。
石丸:私は座標系が気になります。PLATEAUの高さ情報は標高値なので、ジオイド高を加算して楕円体高に変換することが必要です。GeoJSONの場合、WGS84の一択になってしまいますが、高さ情報でジオイド高は使わず?
ジオイド:重力測量や水準測量の結果などから、地球を仮想的に表した楕円体表面からの高さ、地球の重力による位置エネルギーの等しい面。https://www.gsi.go.jp/buturisokuchi/grageo_geoidseika.htmlWGS84:World Geodetic System 1984。米国が構築・維持している世界測地系。GPSによるナビゲーションの位置表示の基準として使われている。なお、高さ情報はWGS84回転楕円体からの楕円体高と定義されており、PLATEAUの標高値にジオイド高を加算して変換することが必要である。
奈良:ジオイドは一切無視です。CityGMLのデータ項目に「measured height」という建物の高さがあったので、それを使ってポリゴンを立ち上げるような形にして、3Dっぽく再現したというのが実情です。
内山:ということは、現状、CityGMLのリッチな情報を受け取って立体が描けるのは3D Tilesくらいだけれど、知見がたまっていないという感じですかね。
奈良:それは非常に感じましたね。GISに取り込もうとして挫折している人が多いんです。実際は、FME Desktopなどを使えば、意外と簡単にパイプラインが作れちゃうのですが、そのあたりのノウハウがQiitaなどにも載っていない。私自身も積極的に発信していきたいと思います。
FME Desktop:空間情報のデータ変換ツール。https://www.safe.com/fme/fme-desktop/