更小的GIS數據格式-Geobuf

背景

我們經常遇到直接傳輸gis數據到前端展示的時候,有時候數據量一稍微多點,傳輸速度就減慢,因為我們用於傳輸的json格式比較大。

Geobuf介紹

Geobuf是一種用於地理數據的緊湊二進制編碼。

Geobuf 幾乎無損地將GeoJSON數據壓縮到協議緩衝區中。單獨使用GeoJSON的優點:

非常緊湊:通常使GeoJSON小6-8倍。

即使比較gzip大小,也要小2-2.5倍。

非常快速的編碼和解碼 - 甚至比原生JSON解析/字符串化更快。

可以容納任何GeoJSON數據,包括具有任意屬性的擴展。

輕鬆增量解析 - 在閱讀時獲取功能,而無需構建整個數據的內存表示。

部分讀取 - 只讀取實際需要的部分,跳過其餘部分。

與Mapbox Vector Tiles不同,它的目標是幾乎無損壓縮數據集-無需平鋪,投影座標,展平幾何或剝離屬性。

“幾乎”無損意味著座標以小數點後的6位數精度(約10cm)編碼(目前還不是無損壓縮)

請注意,編碼架構尚不穩定-它可能會隨著得社區反饋並發現改進它的新方法而改變

Geobuf壓縮

本文中使用PostGIS進行壓縮(geobuf有多種壓縮方式)

<code>select ST_AsGeobuf(sample,'geom') FROM (SELECT id,geom from public."California" ) as sample
/<code>

Geobuf解壓

後端讀取二進制傳給前端,前端使用pbf和geobuf這兩個庫進行解壓得Geojson

<code>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))

});
/<code>
更小的GIS數據格式-Geobuf

對比

| 數據 | geojson |geosjon(gz) | geobuf(gz) |

| ------| ------ | ------ | ------ |

| 20w面 | 57.3MB | 7.6MB | 4.4MB |

| 1w | 2.83MB | 380kb | 218kb |

https://deck.gl/#/documentation/deckgl-api-reference/layers/tile-layer

https://github.com/mapbox/geobuf


分享到:


相關文章: