更小的GIS數據格式-Geobuf

背景

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

Geobuf介紹

Geobuf是一種用於地理數據的緊湊二進制編碼。 Geobuf 幾乎無損地將GeoJSON數據壓縮到協議緩衝區中。單獨使用GeoJSON的優勢: 很是緊湊:一般使GeoJSON小6-8倍。 即便比較gzip大小,也要小2-2.5倍。 很是快速的編碼和解碼 - 甚至比原生JSON解析/字符串化更快。 能夠容納任何GeoJSON數據,包括具備任意屬性的擴展。 輕鬆增量解析 - 在閱讀時獲取功能,而無需構建整個數據的內存表示。 部分讀取 - 只讀取實際須要的部分,跳過其他部分。 與Mapbox Vector Tiles不一樣,它的目標是幾乎無損壓縮數據集-無需平鋪,投影座標,展平幾何或剝離屬性。 「幾乎」無損意味着座標以小數點後的6位數精度(約10cm)編碼(目前還不是無損壓縮) 請注意,編碼架構尚不穩定-它可能會隨着得社區反饋並發現改進它的新方法而改變git

Geobuf壓縮

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

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

Geobuf解壓

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

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)
20w面 57.3MB 7.6MB 4.4MB
1w 2.83MB 380kb 218kb

參考資料:
deck.gl/#/documenta… github.com/mapbox/geob…後端

相關文章
相關標籤/搜索