V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangyuecn
V2EX  ›  程序员

编写了一套 GeoJSON 压缩解压代码,矢量边界坐标 6 位小数精度下可压缩到 1/3 - 1/5 大小, ECharts Map 四级中表现良好

  •  
  •   xiangyuecn ·
    xiangyuecn · 2021-02-22 13:50:44 +08:00 · 2307 次点击
    这是一个创建于 1368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上礼拜开源了一个在线省、市、区县、乡镇街道 四级下钻 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 显示到高德地图里面,用来对照边界是否偏差太大,压缩算法引入几十米误差比较难接受。

    9 条回复    2021-02-22 18:49:17 +08:00
    Jie0zero
        1
    Jie0zero  
       2021-02-22 14:41:37 +08:00
    建议申请专利
    cg919
        2
    cg919  
       2021-02-22 15:23:51 +08:00
    LZ 也做 GIS 开发?
    gooin
        3
    gooin  
       2021-02-22 15:29:56 +08:00
    前两天也在看这块,最后选了 geobuf
    xiangyuecn
        4
    xiangyuecn  
    OP
       2021-02-22 16:10:59 +08:00
    @cg919 #2 不是专业做 GIS 开发的,平时有接触
    xiangyuecn
        5
    xiangyuecn  
    OP
       2021-02-22 16:11:47 +08:00
    @gooin #3 翻了一下 geobuf,巨屌👍
    iikebug
        6
    iikebug  
       2021-02-22 16:36:30 +08:00
    好东西,先收藏。
    liuzhedash
        7
    liuzhedash  
       2021-02-22 18:23:26 +08:00
    建议弄到 github,这种应该给 star
    xiangyuecn
        8
    xiangyuecn  
    OP
       2021-02-22 18:48:03 +08:00
    @liuzhedash #7 github 上有,gitee 是镜像,github.io 经常被污染成 127.0.0.1,后面改成了 gitee.io 可访问性更高

    GitHub: https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
    liuzhedash
        9
    liuzhedash  
       2021-02-22 18:49:17 +08:00
    @xiangyuecn #8 看了一下,几年前就 star 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5089 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.