LoginSignup
5
2

クラウドネイティブなPLATEAU

Last updated at Posted at 2023-12-19

はじめに

早いものでもう今年も終わりに近づきましたね。皆様大変お世話になりました。

今年の数あるGeospatialな話題の中でも群を抜いて光っているのは、クラウドネイティブの動きとDuckDBではないかと、空間クエリ好きな私は個人的に思っております。クラウドネイティブなフォーマットに関するガイドは、Cloud-Optimized Geospatial Formats Guideにお願いするとして、ここでは、私の働いているPSS社内プロジェクトとして、Plateauの建物CityGMLをGeoParquetとGeoPackageにして配布しようとしている中身をお伝えします。

やりたいことは、Plateauのデータを空間解析や表示に気軽に使えるようにしたいということです。下の方には、クリスマスプレゼントもありますのでお楽しみに!

GeoParquetについて

GeoParquetは、ベクタデータを効率的に保存・処理するためのファイルフォーマットです。オープンソースの列指向ファイルフォーマットであるParquetを基にしています。Parquetは大量のデータを効率的に圧縮し、クエリのパフォーマンスを向上させることができます。私の経験だと、GeoJSONやShapefileに比べても大幅にファイルサイズを縮小できます。バージョン1.0で、まだファイルフォーマットとして空間インデックスをサポートしていませんが、将来される予定で、そうなれば最強フォーマットだと思います。いろんなベクタファイルをAmazon S3やGoogle CloudStorageにおいておくだけで、DuckDBでローカルからクエリができたりします。すごいです。
geoparquet_layout.png
図の引用:Cloud-Optimized Geospatial Formats Guide

Plateau建物のCityGMLデータをGeoParquetにする

Plateau建物データはもちろん3Dで作られており、GeoParquetは2Dにしか対応していないので、今作っているデータは、いわゆるフットプリントポリゴンと呼ばれる2Dのデータです。CityGMLの中では、LOD0とも呼ばれています。PlateauのCityGMLのデータを見ると、いずれのデータにもLOD0がありますので、流れとしては、CityGMLからLOD0のジオメトリとユニークIDであるgml_idを取り出しておいて、そこに様々な属性をつけるという流れになります。

ここで大変なのが、Plateauの建物データの属性スキーマは、各市町村ごとに異なる可能性があるということです。属性としては、コアとして共通している部分と、各市町村ごとに拡張できる部分からできているので。PlateauのCityGMLの仕様は、製品仕様書という文章にまとめられていますので、原典はそちらを参照してください。なかなかのボリュームになっています。

なのでデータとしては、LOD0のポリゴンと市町村ごとに変わらない属性、それから発生させたセントロイド、そして各種の属性テーブルという構成にしました。GeoParquetでは、それぞれ別のファイルで、ジオメトリを含むデータはGeoParquet、ジオメトリがないテーブルはParquetとしました。GeoPackageの方は、すべてのデータが一つのファイルに含まれていますので、GISユーザには取り扱いが楽だと思います。ちなみに最新のQGISではGeoParquetはドラッグアンドドロップだけで読み込むことができます。
2023-11-29_16-54-19.png

それから、2Dのデータとしても、せっかく3Dのデータから作るので、高さの情報を3Dジオメトリから取得して格納しました。元々のCityGMLの中にも建物の高さ情報は含まれていますが、3Dジオメトリから、高さの最小、最大値、そしてその差分を計算しました。ついでに、XY方向にも最大、最小値を計算し(緯度経度で)、ポリゴンの面積も計算しました。なので、属性でいろんなことができると思います。表1のcal_で始まる属性がFMEで取得、計算した計測データです。また、セントロイドのH3,レベル15のインデックスもつけているので、色々楽しめると思います。

表1.2D建物データのスキーマ

attribute_name type sample data
citygml_feature_type char(32) NULL
citygml_geometry_name char(32) lod0RoofEdge
source_filename char(32) 53392546_bldg_6697_2_op.gml
gml_id char(64) bldg_fc50c7d9-76ac-4576-bfbd-f37c74410928
building_id char(32) 13111-bldg-524
branch_id smallint NULL
part_id smallint NULL
prefecture char(5) 東京都
prefecture_code char(2) 13
city char(32) 東京都大田区
city_code char(5) 13111
description char(64) NULL
name char(64) 六郷土手郵便局
address char(64) 東京都大田区東六郷三丁目
creation_date date 20230322
termination_date date NULL
class char(32) NULL
class_code smallint NULL
usage_desc char(128) ''
usage_code smallint NULL
year_of_construction smallint NULL
year_of_demolition smallint NULL
roof_type char(32) NULL
roof_type_code smallint NULL
measured_height double 8.3
measured_height_uom char(8) m
storeys_above_ground smallint NULL
storeys_below_ground smallint NULL
storey_heights_above_ground char(256) NULL
storey_heights_above_ground_uom char(8) NULL
storey_heights_below_ground char(64) NULL
storey_heights_below_ground_uom char(8) NULL
lod text(200) lod0
gml_parent_id text fme-gen-4b5ee981-8b92-4462-b93f-037b29cf0ab5
cal_area_m2 double 40.445643597318096
cal_xmin double 139.71218932484814
cal_xmax double 139.71218932484814
cal_ymin double 35.54154939251641
cal_ymax double 35.54160749301028
cal_zmin_m double 2.406
cal_zmax_m double 9.141
cal_height_m double 6.734999999999999
h3_level15_index text 644847779062396846

データの変換は、FME Formを使いました。元々PLATEAU2 to FGDB 建築物というワークスペースを配っているのですが、これを元に、2022の日本全国のデータに対応するように作り直して作業しています。2023/12/17現在で102都市の変換が完了しています。
2023-12-17_17-53-51.png

データを配る

実は、以前にもPlateauのデータをGeoPackageにするプロジェクトをやったのですが、欲しかった属性が抜けていたり、余計な属性が入ってしまったりしていて、まだまだ改良の余地が残っていました。なのでもうすぐ公開するデータは、以前抜けていた、name属性、address属性なども含めた、できる限りすべての属性を含め、更に独自にジオメトリから計算した高さなどを含めた完全版ということになります。

データが全て揃ったら、Githubだけではなく、Source Cooperativeからも配布する予定です。

今回は、クリスマスも間近ということで、東京23区のデータをダウンロードできるようにしました。メリークリスマス!

ライセンス

(c) Pacific Spatial Solutions, inc. 2023 CC-BY. This data is made available under a Creative Commons Attribution 4.0 International license.

データ出典:国土交通省PLATEAU 「3D都市モデル(Project PLATEAU)」(国土交通省)(https://www.geospatial.jp/ckan/dataset/plateau) をもとにジオメトリから各種統計データを算出しオンラインまたはGISソフトウェアで利用しやすいフォーマットに変換。 Pacific Spatial Solutions株式会社 作成

データを使う

GeoParquetのデータをDuckDBで使う方法については、今年開いたSpatail Data Scienceブートキャンプのノートがあるので、参考にしてください。このノートはColabで動きますが、データソースは古いものなので、これを参考にして、新しいデータでいろいろ試してみてください。

謝辞

アドベントカレンダーを作ってくださった青山学院大学の古橋先生ありがとうございます。このプロジェクトは、PSSの飯島さん、奥秋さんのお力を借りて進めております。ありがとうございます!

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2