编写了一套 GeoJSON 压缩解压代码,矢量边界坐标 6 位小数精度下可压缩到 1/3 – 1/5 大小, ECharts Map 四级中表现良好
資深大佬 : xiangyuecn 0
上礼拜开源了一个在线省、市、区县、乡镇街道 四级下钻 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 压缩的对比:
- ECharts.ZigZag 只支持 3 位小数(源码里面写的乘数是 1024,学习时感觉用 1000 才符合正常脑回路),坐标压缩后误差可达几十米(当然用于 ECharts 显示毫无问题);
- GeoZip 支持 6 位小数(乘数是 1000000 ),坐标压缩后误差 0.2 米内。
- ECharts.ZigZag 可压缩到 1/5 甚至更低,压缩结果可安全的用 ASCII 纯文本直接输出;
- GeoZip 大部分情况下仅能压缩到 1/3 大小,压缩结果用了 Base64 编码(输出二进制结果压缩比可接近 ZigZag 的 1/5 大小)。
FQA:为什么我没用 ECharts.ZigZag 来压缩非要自己搞一套?因为我打算把 GeoJSON 显示到高德地图里面,用来对照边界是否偏差太大,压缩算法引入几十米误差比较难接受。
大佬有話說 (9)