更小的GIS數(shù)據(jù)格式-Geobuf

背景

我們經(jīng)常遇到直接傳輸gis數(shù)據(jù)到前端展示的時(shí)候,有時(shí)候數(shù)據(jù)量一稍微多點(diǎn),傳輸速度就減慢,因?yàn)槲覀冇糜趥鬏數(shù)膉son格式比較大。

Geobuf介紹

Geobuf是一種用于地理數(shù)據(jù)的緊湊二進(jìn)制編碼。
Geobuf 幾乎無(wú)損地將GeoJSON數(shù)據(jù)壓縮到協(xié)議緩沖區(qū)中。單獨(dú)使用GeoJSON的優(yōu)點(diǎn):
非常緊湊:通常使GeoJSON小6-8倍。
即使比較gzip大小,也要小2-2.5倍。
非??焖俚木幋a和解碼 - 甚至比原生JSON解析/字符串化更快。
可以容納任何GeoJSON數(shù)據(jù),包括具有任意屬性的擴(kuò)展。
輕松增量解析 - 在閱讀時(shí)獲取功能,而無(wú)需構(gòu)建整個(gè)數(shù)據(jù)的內(nèi)存表示。
部分讀取 - 只讀取實(shí)際需要的部分,跳過(guò)其余部分。
與Mapbox Vector Tiles不同,它的目標(biāo)是幾乎無(wú)損壓縮數(shù)據(jù)集-無(wú)需平鋪,投影坐標(biāo),展平幾何或剝離屬性。
“幾乎”無(wú)損意味著坐標(biāo)以小數(shù)點(diǎn)后的6位數(shù)精度(約10cm)編碼(目前還不是無(wú)損壓縮)
請(qǐng)注意,編碼架構(gòu)尚不穩(wěn)定-它可能會(huì)隨著得社區(qū)反饋并發(fā)現(xiàn)改進(jìn)它的新方法而改變

Geobuf壓縮

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

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

Geobuf解壓

后端讀取二進(jìn)制傳給前端,前端使用pbf和geobuf這兩個(gè)庫(kù)進(jìn)行解壓得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))
});
image

對(duì)比

數(shù)據(jù) 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容