flatGeobufの拡張子

GeoJSONをバイナリ化して圧縮するFlatGeobuf

FlatGeobufは良い、捗るぞ。

GeoJSON

GeoJSON · GIS実習オープン教材

この数年でかなり普及の進んだGeoJSONですが、データ量が増えるとどうしても重くなりファイルサイズも肥大化するため扱いにくくなっていきます。

そこでGeoJSONの良さ(可搬性)を残しつつ、シリアライズ(バイナリ化)することで巨大なデータも扱いやすくしようという試みが行われてきました。

Geobuf

mapbox / geobuf

ファイルサイズが大きくなりがちなGeoJSONをprotocol buffersを使ってシリアライズすることで圧縮したファイルフォーマットです。GeoJSONに比べて8~6分の1ぐらいファイルサイズを抑えることができます。

GeoJSONをGeobufに変換するツールや、ブラウザ上で読み込んだGeobufファイルをGeoJSONに戻す(デシリアライズ)ためのJavaScriptライブラリなどが提供されています。

ただ残念なことに、あまり普及が進んでいません。

「GeoJSONとシームレスに連携するシンプルでモダンなShapefileの後継を設計する」という目標を掲げてはいたのですが、現時点ではGeobufに対応しているGISツールやソフトはあまりなく、データを編集するには毎回GeoJSONに戻してQGISなどのソフトに読み込み、データを編集後、再度geobufに変換するという作業が必要となります。

FlatGeobuf

flatgeobuf / flatgeobuf

いまいち普及の進まなかったGeobufに変わって、ここ最近注目度が上がっているファイルフォーマットがFlatGeobufです。

Geobufとの違いは、シリアライズのアルゴリズムにflatbuffersを用いることで、圧縮率やシリアライズ/デシリアライズのパフォーマンスが向上しています。

さらに、現時点ですでにGDALQGISなどポピュラーなGISツールやソフトがFlatGeobufに対応しています。

Supported applications / libraries

したがって、FlatGeobufファイル(.fgb)はQGISに直接インポートして編集しエクスポートすることができます。

※ 一部、編集が行えないケースがあるようです。

参照:Cannot edit FlatGeobuf backed layer

[追記] QGIS 3.20.3では編集が可能になっています。

いちいちGeojsonに戻して編集する必要がないので手軽に扱うことができます。

Webでの取り扱いが楽(ストリームにも対応)

公式から提供されている flatgeobuf-geojson.min.js を用いると、簡単にflatGeoBufをブラウザで読み込んでGeoJSONにデシリアライズして使うことができます。

また、標準でストリームに対応しているので巨大なデータも非常に扱いやすくなっています。

データ読み込みのサンプル

Fetch APIのStream機能を使ってデータを読み込みながら地図を描画する」の記事で書いたようなデータの逐次読み込みが簡単に記述できます。

GeoJSON->FlatGeobuf ファイルサイズ比較

最後に、国土数値情報から最新の「全国行政区境界データ」をダウンロードしQGISを使ってFlatGeobufに変換していみました。

GeoJSON1.17GB
FlatGeobuf244MB

かなり圧縮されているのがわかるかと思います。

また、GISソフトでのデータ読み込みにかかる時間もFlatGeobufにすることで改善されるので、ぜひ使ってみてください。

カテゴリー: data