echarts 实现世界地图地域流向炫酷效果

简介: ### 实现世界地图地域流向炫酷效果主要步骤:

效果展示
word-map.gif

实现世界地图地域流向炫酷效果主要步骤:

1.引入echart.js 和 world.js

<script src="echarts.min.js"></script>
<script src="world.js"></script>

2.存放地图的容器

<div id="echartsMap"></div>

3.地图生成相关逻辑

let chart = echarts.init(document.getElementById('echartsMap'));
// 小飞机的图标,可以用其他图形替换
var planePath =
    'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';

// 获取地图中起点和终点的坐标,以数组形式保存下来
var convertData = function(data) {
    var res = [];
    for (var i = 0; i < data.length; i++) {
        var dataItem = data[i];
        var fromCoord = geoCoordMap[dataItem[0].name];
        var toCoord = geoCoordMap[dataItem[1].name];
        if (fromCoord && toCoord) {
            res.push([{
                coord: fromCoord // 起点坐标
            }, {
                coord: toCoord // 终点坐标
            }])
        }
    }
    return res;
}

var color = ['#9ae5fc', '#dcbf71']; // 自定义图中要用到的颜色
var series = []; // 用来存储地图数据

[
    //['中国', DMData],
    //['中国', D1LData]
    ['中国', OMData]
].forEach(function(item, i) {
    series.push({
        // 白色航线特效图
        type: 'lines',
        zlevel: 1, // 用于分层,z-index的效果
        effect: {
            show: true, // 动效是否显示
            period: 6, // 特效动画时间
            trailLength: 0.7, // 特效尾迹的长度
            color: '#fff', // 特效颜色
            symbolSize: 3 // 特效大小
        },
        lineStyle: {
            normal: { // 正常情况下的线条样式
                color: color[0],
                width: 0, // 因为是叠加效果,要是有宽度,线条会变粗,白色航线特效不明显
                curveness: -0.2 // 线条曲度
            }
        },
        data: convertData(item[1]) // 特效的起始、终点位置
    }, { // 小飞机航线效果
        type: 'lines',
        zlevel: 2,
        //symbol: ['none', 'arrow'],   // 用于设置箭头
        symbolSize: 10,
        effect: {
            show: true,
            period: 6,
            trailLength: 0,
            // symbol: planePath, // 特效形状,可以用其他svg pathdata路径代替
            symbolSize: 5
        },
        lineStyle: {
            normal: {
                color: color[0],
                width: 1,
                opacity: 0.6,
                curveness: -0.2
            }
        },
        data: convertData(item[1]) // 特效的起始、终点位置,一个二维数组,相当于coords: convertData(item[1])
    }, { // 散点效果
        type: 'effectScatter',
        coordinateSystem: 'geo', // 表示使用的坐标系为地理坐标系
        zlevel: 3,
        rippleEffect: {
            brushType: 'stroke' // 波纹绘制效果
        },
        label: {
            normal: { // 默认的文本标签显示样式
                show: true,
                position: 'left', // 标签显示的位置
                formatter: '{b}' // 标签内容格式器
            }
        },
        itemStyle: {
            normal: {
                color: color[0]
            }
        },
        data: item[1].map(function(dataItem) {
            return {
                name: dataItem[1].name,
                value: geoCoordMap[dataItem[1].name], // 起点的位置
                symbolSize: dataItem[1].value / 4, // 散点的大小,通过之前设置的权重来计算,val的值来自data返回的value
            };
        })
    });
});

// 显示终点位置,类似于上面最后一个效果,放在外面写,是为了防止被循环执行多次
series.push({
    type: 'effectScatter',
    coordinateSystem: 'geo',
    zlevel: 3,
    rippleEffect: {
        brushType: 'stroke'
    },
    label: {
        normal: {
            show: true,
            position: 'left',
            formatter: '{b}'
        }
    },
    symbolSize: function(val) {
        return val[2] / 8;
    },
    itemStyle: {
        normal: {
            color: color[1]
        }
    },
    data: [{
        name: '中国',
        value: [116.46, 39.92, 30],
        label: {
            normal: {
                position: 'right'
            }
        }
    }]
});

// 最后初始化世界地图中的相关数据
chart.setOption({
    backgroundColor: '#101724',
    title: {
        //text: '中国国际贸易促进委员会',
        //subtext: '国别资讯',
        textStyle: {
            color: '#fff',
            fontSize: 20
        },
        top: '10px',
        left: '10px'
    },
    geo: {
        map: 'world', // 与引用进来的地图js名字一致
        roam: false, // 禁止缩放平移
        itemStyle: { // 每个区域的样式
            normal: {
                areaColor: '#7d7d7d'
            },
            emphasis: {
                areaColor: '#2a333d'
            }
        },
        regions: [{ // 选中的区域
            name: 'China',
            selected: false,
            itemStyle: { // 高亮时候的样式
                emphasis: {
                    areaColor: '#7d7d7d'
                }
            },
            label: { // 高亮的时候不显示标签
                emphasis: {
                    show: false
                }
            }
        }]
    },
    series: series, // 将之前处理的数据放到这里
    textStyle: {
        fontSize: 12
    }
});

相关数据

/*
图中相关城市经纬度,根据你的需求添加数据
关于国家的经纬度,可以用首都的经纬度或者其他城市的经纬度
*/
var geoCoordMap = {
    //东盟十国
    '广州': [113.5107, 23.2196],
    '马来西亚': [101.975766, 4.210484],
    '印度尼西亚': [113.921327, -0.789275],
    '泰国': [100.992541, 15.870032],
    '菲律宾': [121.774017, 12.879721],
    '文莱': [114.727669, 4.535277],
    '越南': [108.277199, 14.058324],
    '老挝': [102.495496, 19.85627],
    '缅甸': [95.956223, 21.913965],
    '柬埔寨': [104.990963, 12.565679],
    '新加坡': [103.51, 1.17],
    //一带一路
    '广州': [113.5107, 23.2196],
    '中国': [116.40, 39.90],
    '蒙古': [103.846656, 46.862496],
    '俄罗斯': [105.318756, 61.52401],
    '东帝汶': [125.727539, -8.874217],
    '印度': [78.96288, 20.593684],
    '巴基斯坦': [69.34511599999999, 30.375321],
    '孟加拉国': [90.356331, 23.684994],
    '斯里兰卡': [80.77179699999999, 7.873053999999999],
    '阿富汗': [67.709953, 33.93911],
    '尼泊尔': [84.12400799999999, 28.394857],
    '马尔代夫': [73.5, 4.2],
    '不丹': [90.433601, 27.514162],
    '沙特阿拉伯': [45.079162, 23.885942],
    '阿联酋': [53.847818, 23.424076],
    '阿曼': [55.923255, 21.512583],
    '伊朗': [53.688046, 32.427908],
    '土耳其': [35.243322, 38.963745],
    '以色列': [34.851612, 31.046051],
    '埃及': [30.802498, 26.820553],
    '科威特': [47.481766, 29.31166],
    '伊拉克': [43.679291, 33.223191],
    '卡塔尔': [51.183884, 25.354826],
    '约旦': [36.238414, 30.585164],
    '黎巴嫩': [35.862285, 33.854721],
    '巴林': [50.36, 26.12],
    '也门': [48.516388, 15.552727],
    '叙利亚': [38.996815, 34.80207499999999],
    '巴勒斯坦': [34.28, 31.30],
    '波兰': [19.145136, 51.919438],
    '罗马尼亚': [24.96676, 45.943161],
    '捷克共和国': [15.472962, 49.81749199999999],
    '斯洛伐克': [19.699024, 48.669026],
    '保加利亚': [25.48583, 42.733883],
    '匈牙利': [19.503304, 47.162494],
    '拉脱维亚': [24.603189, 56.879635],
    '立陶宛': [23.881275, 55.169438],
    '斯洛文尼亚': [14.995463, 46.151241],
    '爱沙尼亚': [25.013607, 58.595272],
    '克罗地亚': [15.2, 45.1],
    '阿尔巴尼亚': [20.168331, 41.153332],
    '塞尔维亚': [21.005859, 44.016521],
    '马其顿': [21.745275, 41.608635],
    '波黑': [43.52, 18.26],
    '黑山': [19.37439, 42.708678],
    '哈萨克斯坦': [66.923684, 48.019573],
    '乌兹别克斯坦': [64.585262, 41.377491],
    '土库曼斯坦': [59.556278, 38.969719],
    '吉尔吉斯斯坦': [74.766098, 41.20438],
    '塔吉克斯坦': [71.276093, 38.861034],
    '乌克兰': [31.16558, 48.379433],
    '白俄罗斯': [27.953389, 53.709807],
    '格鲁吉亚': [43.356892, 42.315407],
    '阿塞拜疆': [47.576927, 40.143105],
    '亚美尼亚': [45.038189, 40.069099],
    '摩尔多瓦': [28.369885, 47.411631],
    //欧美国家
    '挪威': [8.468945999999999, 60.47202399999999],
    '丹麦': [9.501785, 56.26392],
    '瑞典': [18.643501, 60.12816100000001],
    '芬兰': [25.748151, 61.92410999999999],
    '英国': [-3.435973, 55.378051],
    '荷兰': [5.291265999999999, 52.132633],
    '爱尔兰': [-8.24389, 53.41291],
    '比利时': [4.469936, 50.503887],
    '卢森堡': [6.129582999999999, 49.815273],
    '法国': [2.213749, 46.227638],
    '西班牙': [-3.74922, 40.46366700000001],
    '葡萄牙': [-8.224454, 39.39987199999999],
    '德国': [10.451526, 51.165691],
    '奥地利': [14.550072, 47.516231],
    '瑞士': [8.227511999999999, 46.818188],
    '美国': [-95.712891, 37.09024],
    '加拿大': [-102.646409, 59.994255],
    '澳大利亚': [133.775136, -25.274398],
    '新西兰': [174.885971, -40.900557]
};

// 东盟10国
var DMData = [
    [{
        name: '中国'
    }, {
        name: "马来西亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "印度尼西亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "泰国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "菲律宾",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "文莱",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "越南",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "老挝",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "缅甸",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "柬埔寨",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "新加坡",
        value: 30
    }]
];
//一带一路
var D1LData = [
    [{
        name: '中国'
    }, {
        name: "蒙古",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "俄罗斯",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "东帝汶",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "印度",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "巴基斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "孟加拉国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "斯里兰卡",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "阿富汗",
        value: 30
    }],
    [{
        name: '广州'
    }, {
        name: "尼泊尔",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "马尔代夫",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "不丹",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "沙特阿拉伯",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "阿联酋",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "阿曼",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "伊朗",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "土耳其",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "以色列",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "埃及",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "科威特",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "伊拉克",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "卡塔尔",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "约旦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "黎巴嫩",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "巴林",
        value: 30
    }],
    [{
        name: '广州'
    }, {
        name: "也门",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "叙利亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "巴勒斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "波兰",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "罗马尼亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "捷克共和国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "斯洛伐克",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "保加利亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "匈牙利",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "拉脱维亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "立陶宛",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "斯洛文尼亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "爱沙尼亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "克罗地亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "阿尔巴尼亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "塞尔维亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "马其顿",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "波黑",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "黑山",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "哈萨克斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "乌兹别克斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "土库曼斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "吉尔吉斯斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "塔吉克斯坦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "乌克兰",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "白俄罗斯",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "格鲁吉亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "阿塞拜疆",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "亚美尼亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "摩尔多瓦",
        value: 30
    }]
];
var OMData = [ //欧美国家
    [{
        name: '中国'
    }, {
        name: "挪威",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "丹麦",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "瑞典",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "芬兰",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "英国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "荷兰",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "爱尔兰",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "比利时",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "卢森堡",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "法国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "西班牙",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "葡萄牙",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "德国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "奥地利",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "瑞士",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "美国",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "加拿大",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "澳大利亚",
        value: 30
    }],
    [{
        name: '中国'
    }, {
        name: "新西兰",
        value: 30
    }]
];

完整的demo

<!DOCTYPE html>
<html>
    <head>
        <title>demo | vue-amap</title>
        <meta charset="UTF-8">
    </head>
    <style scoped="">
        html,
        body {
            margin: 0;
            padding: 0;
        }

        #echartsMap {
            width: 1920px;
            height: 1080px;

        }

        .map-wrapper {
            background-color: #101724;
            display: flex;
            width: 100%;
            height: 100vh;
            align-items: center;
            justify-content: center;
        }
    </style>
    <body>
        <div class="map-wrapper">
            <div id="echartsMap"></div>
        </div>
    </body>
    <!-- 引入组件库 -->
    <script src="echarts.min.js"></script>
    <script src="world.js"></script>
    <script>
        let chart = echarts.init(document.getElementById('echartsMap'));
        /*
            图中相关城市经纬度,根据你的需求添加数据
            关于国家的经纬度,可以用首都的经纬度或者其他城市的经纬度
        */
        var geoCoordMap = {
            //东盟十国
            '广州': [113.5107, 23.2196],
            '马来西亚': [101.975766, 4.210484],
            '印度尼西亚': [113.921327, -0.789275],
            '泰国': [100.992541, 15.870032],
            '菲律宾': [121.774017, 12.879721],
            '文莱': [114.727669, 4.535277],
            '越南': [108.277199, 14.058324],
            '老挝': [102.495496, 19.85627],
            '缅甸': [95.956223, 21.913965],
            '柬埔寨': [104.990963, 12.565679],
            '新加坡': [103.51, 1.17],
            //一带一路
            '广州': [113.5107, 23.2196],
            '中国': [116.40, 39.90],
            '蒙古': [103.846656, 46.862496],
            '俄罗斯': [105.318756, 61.52401],
            '东帝汶': [125.727539, -8.874217],
            '印度': [78.96288, 20.593684],
            '巴基斯坦': [69.34511599999999, 30.375321],
            '孟加拉国': [90.356331, 23.684994],
            '斯里兰卡': [80.77179699999999, 7.873053999999999],
            '阿富汗': [67.709953, 33.93911],
            '尼泊尔': [84.12400799999999, 28.394857],
            '马尔代夫': [73.5, 4.2],
            '不丹': [90.433601, 27.514162],
            '沙特阿拉伯': [45.079162, 23.885942],
            '阿联酋': [53.847818, 23.424076],
            '阿曼': [55.923255, 21.512583],
            '伊朗': [53.688046, 32.427908],
            '土耳其': [35.243322, 38.963745],
            '以色列': [34.851612, 31.046051],
            '埃及': [30.802498, 26.820553],
            '科威特': [47.481766, 29.31166],
            '伊拉克': [43.679291, 33.223191],
            '卡塔尔': [51.183884, 25.354826],
            '约旦': [36.238414, 30.585164],
            '黎巴嫩': [35.862285, 33.854721],
            '巴林': [50.36, 26.12],
            '也门': [48.516388, 15.552727],
            '叙利亚': [38.996815, 34.80207499999999],
            '巴勒斯坦': [34.28, 31.30],
            '波兰': [19.145136, 51.919438],
            '罗马尼亚': [24.96676, 45.943161],
            '捷克共和国': [15.472962, 49.81749199999999],
            '斯洛伐克': [19.699024, 48.669026],
            '保加利亚': [25.48583, 42.733883],
            '匈牙利': [19.503304, 47.162494],
            '拉脱维亚': [24.603189, 56.879635],
            '立陶宛': [23.881275, 55.169438],
            '斯洛文尼亚': [14.995463, 46.151241],
            '爱沙尼亚': [25.013607, 58.595272],
            '克罗地亚': [15.2, 45.1],
            '阿尔巴尼亚': [20.168331, 41.153332],
            '塞尔维亚': [21.005859, 44.016521],
            '马其顿': [21.745275, 41.608635],
            '波黑': [43.52, 18.26],
            '黑山': [19.37439, 42.708678],
            '哈萨克斯坦': [66.923684, 48.019573],
            '乌兹别克斯坦': [64.585262, 41.377491],
            '土库曼斯坦': [59.556278, 38.969719],
            '吉尔吉斯斯坦': [74.766098, 41.20438],
            '塔吉克斯坦': [71.276093, 38.861034],
            '乌克兰': [31.16558, 48.379433],
            '白俄罗斯': [27.953389, 53.709807],
            '格鲁吉亚': [43.356892, 42.315407],
            '阿塞拜疆': [47.576927, 40.143105],
            '亚美尼亚': [45.038189, 40.069099],
            '摩尔多瓦': [28.369885, 47.411631],
            //欧美国家
            '挪威': [8.468945999999999, 60.47202399999999],
            '丹麦': [9.501785, 56.26392],
            '瑞典': [18.643501, 60.12816100000001],
            '芬兰': [25.748151, 61.92410999999999],
            '英国': [-3.435973, 55.378051],
            '荷兰': [5.291265999999999, 52.132633],
            '爱尔兰': [-8.24389, 53.41291],
            '比利时': [4.469936, 50.503887],
            '卢森堡': [6.129582999999999, 49.815273],
            '法国': [2.213749, 46.227638],
            '西班牙': [-3.74922, 40.46366700000001],
            '葡萄牙': [-8.224454, 39.39987199999999],
            '德国': [10.451526, 51.165691],
            '奥地利': [14.550072, 47.516231],
            '瑞士': [8.227511999999999, 46.818188],
            '美国': [-95.712891, 37.09024],
            '加拿大': [-102.646409, 59.994255],
            '澳大利亚': [133.775136, -25.274398],
            '新西兰': [174.885971, -40.900557]
        };

        // 东盟10国
        var DMData = [
            [{
                name: '中国'
            }, {
                name: "马来西亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "印度尼西亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "泰国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "菲律宾",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "文莱",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "越南",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "老挝",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "缅甸",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "柬埔寨",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "新加坡",
                value: 30
            }]
        ];
        //一带一路
        var D1LData = [
            [{
                name: '中国'
            }, {
                name: "蒙古",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "俄罗斯",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "东帝汶",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "印度",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "巴基斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "孟加拉国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "斯里兰卡",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "阿富汗",
                value: 30
            }],
            [{
                name: '广州'
            }, {
                name: "尼泊尔",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "马尔代夫",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "不丹",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "沙特阿拉伯",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "阿联酋",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "阿曼",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "伊朗",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "土耳其",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "以色列",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "埃及",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "科威特",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "伊拉克",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "卡塔尔",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "约旦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "黎巴嫩",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "巴林",
                value: 30
            }],
            [{
                name: '广州'
            }, {
                name: "也门",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "叙利亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "巴勒斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "波兰",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "罗马尼亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "捷克共和国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "斯洛伐克",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "保加利亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "匈牙利",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "拉脱维亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "立陶宛",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "斯洛文尼亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "爱沙尼亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "克罗地亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "阿尔巴尼亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "塞尔维亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "马其顿",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "波黑",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "黑山",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "哈萨克斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "乌兹别克斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "土库曼斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "吉尔吉斯斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "塔吉克斯坦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "乌克兰",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "白俄罗斯",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "格鲁吉亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "阿塞拜疆",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "亚美尼亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "摩尔多瓦",
                value: 30
            }]
        ];
        var OMData = [ //欧美国家
            [{
                name: '中国'
            }, {
                name: "挪威",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "丹麦",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "瑞典",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "芬兰",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "英国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "荷兰",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "爱尔兰",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "比利时",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "卢森堡",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "法国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "西班牙",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "葡萄牙",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "德国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "奥地利",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "瑞士",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "美国",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "加拿大",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "澳大利亚",
                value: 30
            }],
            [{
                name: '中国'
            }, {
                name: "新西兰",
                value: 30
            }]
        ];

        // 小飞机的图标,可以用其他图形替换
        var planePath =
            'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';

        // 获取地图中起点和终点的坐标,以数组形式保存下来
        var convertData = function(data) {
            var res = [];
            for (var i = 0; i < data.length; i++) {
                var dataItem = data[i];
                var fromCoord = geoCoordMap[dataItem[0].name];
                var toCoord = geoCoordMap[dataItem[1].name];
                if (fromCoord && toCoord) {
                    res.push([{
                        coord: fromCoord // 起点坐标
                    }, {
                        coord: toCoord // 终点坐标
                    }])
                }
            }
            return res;
        }

        var color = ['#9ae5fc', '#dcbf71']; // 自定义图中要用到的颜色
        var series = []; // 用来存储地图数据

        [
            //['中国', DMData],
            //['中国', D1LData]
            ['中国', OMData]
        ].forEach(function(item, i) {
            series.push({
                // 白色航线特效图
                type: 'lines',
                zlevel: 1, // 用于分层,z-index的效果
                effect: {
                    show: true, // 动效是否显示
                    period: 6, // 特效动画时间
                    trailLength: 0.7, // 特效尾迹的长度
                    color: '#fff', // 特效颜色
                    symbolSize: 3 // 特效大小
                },
                lineStyle: {
                    normal: { // 正常情况下的线条样式
                        color: color[0],
                        width: 0, // 因为是叠加效果,要是有宽度,线条会变粗,白色航线特效不明显
                        curveness: -0.2 // 线条曲度
                    }
                },
                data: convertData(item[1]) // 特效的起始、终点位置
            }, { // 小飞机航线效果
                type: 'lines',
                zlevel: 2,
                //symbol: ['none', 'arrow'],   // 用于设置箭头
                symbolSize: 10,
                effect: {
                    show: true,
                    period: 6,
                    trailLength: 0,
                    // symbol: planePath, // 特效形状,可以用其他svg pathdata路径代替
                    symbolSize: 5
                },
                lineStyle: {
                    normal: {
                        color: color[0],
                        width: 1,
                        opacity: 0.6,
                        curveness: -0.2
                    }
                },
                data: convertData(item[1]) // 特效的起始、终点位置,一个二维数组,相当于coords: convertData(item[1])
            }, { // 散点效果
                type: 'effectScatter',
                coordinateSystem: 'geo', // 表示使用的坐标系为地理坐标系
                zlevel: 3,
                rippleEffect: {
                    brushType: 'stroke' // 波纹绘制效果
                },
                label: {
                    normal: { // 默认的文本标签显示样式
                        show: true,
                        position: 'left', // 标签显示的位置
                        formatter: '{b}' // 标签内容格式器
                    }
                },
                itemStyle: {
                    normal: {
                        color: color[0]
                    }
                },
                data: item[1].map(function(dataItem) {
                    return {
                        name: dataItem[1].name,
                        value: geoCoordMap[dataItem[1].name], // 起点的位置
                        symbolSize: dataItem[1].value / 4, // 散点的大小,通过之前设置的权重来计算,val的值来自data返回的value
                    };
                })
            });
        });

        // 显示终点位置,类似于上面最后一个效果,放在外面写,是为了防止被循环执行多次
        series.push({
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 3,
            rippleEffect: {
                brushType: 'stroke'
            },
            label: {
                normal: {
                    show: true,
                    position: 'left',
                    formatter: '{b}'
                }
            },
            symbolSize: function(val) {
                return val[2] / 8;
            },
            itemStyle: {
                normal: {
                    color: color[1]
                }
            },
            data: [{
                name: '中国',
                value: [116.46, 39.92, 30],
                label: {
                    normal: {
                        position: 'right'
                    }
                }
            }]
        });

        // 最后初始化世界地图中的相关数据
        chart.setOption({
            backgroundColor: '#101724',
            title: {
                //text: '中国国际贸易促进委员会',
                //subtext: '国别资讯',
                textStyle: {
                    color: '#fff',
                    fontSize: 20
                },
                top: '10px',
                left: '10px'
            },
            geo: {
                map: 'world', // 与引用进来的地图js名字一致
                roam: false, // 禁止缩放平移
                itemStyle: { // 每个区域的样式
                    normal: {
                        areaColor: '#7d7d7d'
                    },
                    emphasis: {
                        areaColor: '#2a333d'
                    }
                },
                regions: [{ // 选中的区域
                    name: 'China',
                    selected: false,
                    itemStyle: { // 高亮时候的样式
                        emphasis: {
                            areaColor: '#7d7d7d'
                        }
                    },
                    label: { // 高亮的时候不显示标签
                        emphasis: {
                            show: false
                        }
                    }
                }]
            },
            series: series, // 将之前处理的数据放到这里
            textStyle: {
                fontSize: 12
            }
        });
    </script>
</html>
相关文章
|
11月前
|
Web App开发 数据可视化 JavaScript
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
141 0
|
JavaScript 定位技术 容器
vue使用echarts实现世界地图和中国地图以及切换地图功能
功能是中国地图和世界地图的展示,并可以互相切换的功能。(无法上传视频格式没有做动图,具体效果大家可以复制代码到本地实操看)
772 0
|
JSON JavaScript 定位技术
vue 使用echarts 实现世界地图、中国地图、以及下钻地图绘制
需求:世界地图和中国切图可以互相切换,点击一级中国地图跳转带下钻二级页面(这里的下钻到市级地图是在二级页面显示)
2661 1
|
19天前
|
数据可视化
echarts图表坐标轴数据标签添加下划线
echarts图表坐标轴数据标签添加下划线
79 0
|
19天前
|
前端开发 JavaScript BI
Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)
使用echarts和highcharts图表库实现折线图、柱状图、饼图和数据集图
80 2
|
19天前
|
数据可视化 JavaScript 前端开发
Echarts是一个开源的JavaScript可视化库,用于创建各种类型的图表
Echarts是JavaScript的开源可视化库,Python通过Pyecharts库可调用它来绘制图表。示例展示了如何用Pyecharts创建柱状图:定义图表对象,设置标题和坐标轴,添加X轴、Y轴数据,最后渲染展示。Pyecharts还支持折线图、散点图、饼图等多种图表类型,更多详情可查阅官方文档。
37 0
|
19天前
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
35 0
|
19天前
|
存储
vue2、vue3分别配置echarts多图表的同步缩放(二)
vue2、vue3分别配置echarts多图表的同步缩放
21 0
|
19天前
|
API
vue2、vue3分别配置echarts多图表的同步缩放(一)
vue2、vue3分别配置echarts多图表的同步缩放
25 0
|
19天前
|
容器
echarts图表怎样实现刷新功能?
echarts图表怎样实现刷新功能?