zoukankan      html  css  js  c++  java
  • 【转】echarts地图数据和压缩、解码

    ZigZag算法
    亲测有用

    /* 解码 */
    function decodePolygon(coordinate, encodeOffsets) {
        var result = [];
        var prevX = encodeOffsets[0];
        var prevY = encodeOffsets[1];
    
        for (var i = 0; i < coordinate.length; i += 2) {
            var x = coordinate.charCodeAt(i) - 64;
            var y = coordinate.charCodeAt(i + 1) - 64;
            // ZigZag decoding
            x = (x >> 1) ^ ( - (x & 1));
            y = (y >> 1) ^ ( - (y & 1));
            // Delta deocding
            x += prevX;
            y += prevY;
    
            prevX = x;
            prevY = y;
            // Dequantize
            result.push([x / 1024, y / 1024]);
        }
        return result;
    }
    /* 压缩 */
    // function encodePolygon(coordinate) {
    // var prevX = 0,
    // prevY = 0;
    // var coorstr = "";
    // var encodeOffsets = [];
    // var result = {
    // 'coordinate': coorstr,
    // 'encodeOffsets': encodeOffsets
    // };
    // for (var i = coordinate.length - 1; i > 0; i--) {
    // var x = coordinate[i][0];
    // var y = coordinate[i][1];
    // x = x * 1024;
    // y = y * 1024;
    // x -= coordinate[i - 1][0] * 1024;
    // y -= coordinate[i - 1][1] * 1024;
    // x = (x << 1) ^ (x >> 31);
    // y = (y << 1) ^ (y >> 31);
    // coorstr = String.fromCharCode(x + 64) + String.fromCharCode(y + 64) + coorstr;
    // }
    // result.coordinate = "@@" + coorstr;
    // result.encodeOffsets = [coordinate[0][0] * 1024, coordinate[0][1] * 1024]
    // return result;
    // 
    // }
    function encodePolygon(coordinate, encodeOffsets) {
        var result = '';
        var prevX = quantize(coordinate[0][0]);
        var prevY = quantize(coordinate[0][1]);
        // Store the origin offset
        encodeOffsets[0] = prevX;
        encodeOffsets[1] = prevY;
        for (var i = 0; i < coordinate.length; i++) {
            var point = coordinate[i];
            result += encode(point[0], prevX);
            result += encode(point[1], prevY);
            prevX = quantize(point[0]);
            prevY = quantize(point[1]);
        }
        return result;
    }
    function encode(val, prev) {
        // Quantization
        val = quantize(val);
        // var tmp = val;
        // Delta
        val = val - prev;
        if (((val << 1) ^ (val >> 15)) + 64 === 8232) {
            //WTF, 8232 will get syntax error in js code
            val--;
        }
        // ZigZag
        val = (val << 1) ^ (val >> 15);
        // add offset and get unicode
        return String.fromCharCode(val + 64);
        // var tmp = {'tmp' : str};
        // try{
        // eval("(" + JSON.stringify(tmp) + ")");
        // }catch(e) {
        // console.log(val + 64);
        // }
    }
    function quantize(val) {
        return Math.ceil(val * 1024);
    }


    *注:每次压缩之后需要将编码中的 更换为 \

    另外附上:
    省市县地图json or js
    geoJson在线生成工具
    from:https://blog.csdn.net/qq_43476178/article/details/97266795

    文章乃参考、转载其他博客所得,仅供自己学习作笔记使用!!!
  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/14707602.html
Copyright © 2011-2022 走看看