より小さいGISデータフォーマット-Geobuf


背景
gisデータをフロントエンドに直接転送する場合、データ量が少し多くなると、転送速度が遅くなることがあります.なぜなら、転送に使用するjsonフォーマットが大きいからです.
Geobufの紹介
Geobufは地理データのためのコンパクトなバイナリ符号化である.GeobufはGeoJSONデータをほぼ無損にプロトコルバッファに圧縮する.GeoJSON単独使用の利点:非常にコンパクト:通常GeoJSONを6-8倍小さくする.gzipサイズを比較しても2-2.5倍小さくなります.非常に高速な符号化と復号化-オリジナルJSON解析/文字列化よりも高速です.任意の属性を持つ拡張を含む任意のGeoJSONデータを格納できます.簡単なインクリメンタル解析-データ全体のメモリ表示を構築することなく、読み取り時に機能を取得します.≪部分読取り|Partial Read|emdw≫:実際に必要な部分のみを読取り、残りの部分をスキップします.Mapbox Vector Tilesとは異なり、データセットをほぼ無損失に圧縮することを目標としています.タイリング、投影座標、フラットジオメトリ、または剥離プロパティを必要としません.「ほぼ無損」は、座標が小数点以下の6桁の精度(約10 cm)で符号化されていることを意味します(現在は無損圧縮ではありません).符号化アーキテクチャはまだ不安定です.コミュニティからフィードバックされ、改善された新しい方法が発見されるにつれて変更される可能性があります.
Geobuf圧縮
本稿ではPostGISを用いて圧縮する(geobufには複数の圧縮方式がある)
select ST_AsGeobuf(sample,'geom') FROM (SELECT id,geom from public."California" ) as sample

Geobuf解凍
バックエンドはフロントエンドにバイナリを読み込み、フロントエンドはpbfとgeobufの2つのライブラリを使用してGeojsonを解凍します.
fetch("http://localhost:8081/geobuf/")
        .then(response => response.arrayBuffer())
        .then(buffer => {
          var vt = new Pbf(buffer);
          var geojson = geobuf.decode(vt);
          console.log(JSON.stringify(geojson))
});

コントラスト
データ#データ#
geojson
geosjon(gz)
geobuf(gz)
20 w面
57.3MB
7.6MB
4.4MB
1w
2.83MB
380kb
218kb
参考資料:https://deck.gl/#/documentation/deckgl-api-reference/layers/tile-layerhttps://github.com/mapbox/geobuf
転載先:https://www.cnblogs.com/polong/p/11532450.html