編寫了一套 GeoJSON 壓縮解壓程式碼,向量邊界座標 6 位小數精度下可壓縮到 1/3 - 1/5 大小, ECharts Map 四級中表現良好

程式設計師 xiangyuecn • at 2021-02-22 14:06:59 • 4 Views

上禮拜開源了一個線上省、市、區縣、鄉鎮街道 四級下鑽 ECharts Map 的 demo 程式碼。

不過始終糾結於伺服器傳輸的 geojson 資料太大,於是前天就參考 ZigZag 壓縮自己搞了一套壓縮解壓程式碼:GeoZip,已開源 js 、c# 兩個語言的實現,程式碼行數不超過 200 行(含註釋)。可用於伺服器端輸出的 GeoJSON 資料壓縮,減少伺服器流量。

原始碼+線上測試: https://xiangyuecn.gitee.io/areacity-jsspider-statsgov/assets/geo-echarts.html 裡面有 ECharts Map 四級下鑽的前端 js 原始碼,後端原始碼也開源了是 C#的。


GeoZip 和 ECharts 自帶的 ZigZag 壓縮的對比:

  1. ECharts.ZigZag 只支援 3 位小數(原始碼裡面寫的乘數是 1024,學習時感覺用 1000 才符合正常腦回路),座標壓縮後誤差可達幾十米(當然用於 ECharts 顯示毫無問題);
  2. GeoZip 支援 6 位小數(乘數是 1000000 ),座標壓縮後誤差 0.2 米內。
  3. ECharts.ZigZag 可壓縮到 1/5 甚至更低,壓縮結果可安全的用 ASCII 純文字直接輸出;
  4. GeoZip 大部分情況下僅能壓縮到 1/3 大小,壓縮結果用了 Base64 編碼(輸出二進位制結果壓縮比可接近 ZigZag 的 1/5 大小)。

FQA:為什麼我沒用 ECharts.ZigZag 來壓縮非要自己搞一套?因為我打算把 GeoJSON 顯示到高德地圖裡面,用來對照邊界是否偏差太大,壓縮演算法引入幾十米誤差比較難接受。

Total: 9
Add a reply
For Commenting you need to Login. If you dont have a Account you need to Register.