背景
我們經常遇到直接傳輸gis資料到前端展示的時候,有時候資料量一稍微多點,傳輸速度就減慢,因為我們用于傳輸的json格式比較大,
Geobuf介紹
Geobuf是一種用于地理資料的緊湊二進制編碼, Geobuf 幾乎無損地將GeoJSON資料壓縮到協議緩沖區中,單獨使用GeoJSON的優點: 非常緊湊:通常使GeoJSON小6-8倍, 即使比較gzip大小,也要小2-2.5倍, 非常快速的編碼和解碼 - 甚至比原生JSON決議/字串化更快, 可以容納任何GeoJSON資料,包括具有任意屬性的擴展, 輕松增量決議 - 在閱讀時獲取功能,而無需構建整個資料的記憶體表示, 部分讀取 - 只讀取實際需要的部分,跳過其余部分, 與Mapbox Vector Tiles不同,它的目標是幾乎無損壓縮資料集-無需平鋪,投影坐標,展平幾何或剝離屬性, “幾乎”無損意味著坐標以小數點后的6位數精度(約10cm)編碼(目前還不是無損壓縮) 請注意,編碼架構尚不穩定-它可能會隨著得社區反饋并發現改進它的新方法而改變
Geobuf壓縮
本文中使用PostGIS進行壓縮(geobuf有多種壓縮方式)
select ST_AsGeobuf(sample,'geom') FROM (SELECT id,geom from public."California" ) as sample
Geobuf解壓
后端讀取二進制傳給前端,前端使用pbf和geobuf這兩個庫進行解壓得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))
});

對比
參考資料:
https://github.com/mapbox/geobuf
https://deck.gl/#/documentation/deckgl-api-reference/layers/tile-layer
本文轉載自:https://www.cnblogs.com/polong/p/11532450.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/257780.html
標籤:其他
