杨小杰Blog(Youngxj)提供免费教程下载和网站搭建技术教程,主要分享和发布网站源码,致力创造一个高质量网络资源教程的分享平台

Echarts世界级迁徙图

Young小杰2019-9-26 15:15 网站搭建(2)2611小标签: 网站源码 html源码 技术教程 原创 小杰

前言

公司一项目需要迁徙图,以展示公司业务范围涉及是多么的广。

好吧,作为一个后端PHPer无奈的接下了这个任务。

返回不断查手册、找配置、改代码,总算完成,还支持自适应哦。

大部分配置及参数我都备注了,本来想给中国单独加一个红色的背景图,但是搞了很久没搞好就放弃了。

参考资料:《echartsjs官方手册》《echarts世界地图各个国家的经纬度数组》《关于怎么在echarts飞机迁移图中换掉飞机图标


预览

图表.png

代码

<script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/extension/bmap.min.js"></script>
<script src="http://echarts.baidu.com/asset/map/js/world.js"></script>
<script src="http://echarts.baidu.com/asset/map/js/china.js"></script>

<style>
    @media screen and (min-width: 767px) {
      #main{height:800px;padding: 0 30px 0 30px;}
    }
    @media screen and (max-width: 767px) {
      #main{height:200px;padding: 0px;}
    }
</style>
<div id="main" style="width: 100%;text-align: center;"></div>

<script type="text/javascript">
        
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
          visualMap: {
            min: 0,  
            max: 100,  
            text:['业务量(件)/年'],  
            realtime: false,  
            calculable: false,  
            color: ['orangered','yellow','lightskyblue'],
            show:false,  
            padding:0,

          },
          series: [{
            // 图标类型 
            type: 'map',
          }]
        });

        // 指定图表的配置项和数据
        var geoCoordMap = {
          '阿富汗':[67.709953,33.93911],
          '安哥拉':[17.873887,-11.202692],
          '阿尔巴尼亚':[20.168331,41.153332],
          '阿联酋':[53.847818,23.424076],
          '阿根廷':[-63.61667199999999,-38.416097],
          '亚美尼亚':[45.038189,40.069099],
          '法属南半球和南极领地':[69.348557,-49.280366],
          '澳大利亚':[133.775136,-25.274398],
          '奥地利':[14.550072,47.516231],
          '阿塞拜疆':[47.576927,40.143105],
          '布隆迪':[29.918886,-3.373056],
          '比利时':[4.469936,50.503887],
          '贝宁':[2.315834,9.30769],
          '布基纳法索':[-1.561593,12.238333],
          '孟加拉国':[90.356331,23.684994],
          '保加利亚':[25.48583,42.733883],
          '巴哈马':[-77.39627999999999,25.03428],
          '波斯尼亚和黑塞哥维那':[17.679076,43.915886],
          '白俄罗斯':[27.953389,53.709807],
          '伯利兹':[-88.49765,17.189877],
          '百慕大':[-64.7505,32.3078],
          '玻利维亚':[-63.58865299999999,-16.290154],
          '巴西':[-51.92528,-14.235004],
          '文莱':[114.727669,4.535277],
          '不丹':[90.433601,27.514162],
          '博茨瓦纳':[24.684866,-22.328474],
          '中非共和国':[20.939444,6.611110999999999],
          '加拿大':[-106.346771,56.130366],
          '瑞士':[8.227511999999999,46.818188],
          '智利':[-71.542969,-35.675147],
          '中国':[104.195397,35.86166],
          '象牙海岸':[-5.547079999999999,7.539988999999999],
          '喀麦隆':[12.354722,7.369721999999999],
          '刚果民主共和国':[21.758664,-4.038333],
          '刚果共和国':[15.827659,-0.228021],
          '哥伦比亚':[-74.297333,4.570868],
          '哥斯达黎加':[-83.753428,9.748916999999999],
          '古巴':[-77.781167,21.521757],
          '北塞浦路斯':[33.429859,35.126413],
          '塞浦路斯':[33.429859,35.126413],
          '捷克共和国':[15.472962,49.81749199999999],
          '德国':[10.451526,51.165691],
          '吉布提':[42.590275,11.825138],
          '丹麦':[9.501785,56.26392],
          '多明尼加共和国':[-70.162651,18.735693],
          '阿尔及利亚':[1.659626,28.033886],
          '厄瓜多尔':[-78.18340599999999,-1.831239],
          '埃及':[30.802498,26.820553],
          '厄立特里亚':[39.782334,15.179384],
          '西班牙':[-3.74922,40.46366700000001],
          '爱沙尼亚':[25.013607,58.595272],
          '埃塞俄比亚':[40.489673,9.145000000000001],
          '芬兰':[25.748151,61.92410999999999],
          '斐':[178.065032,-17.713371],
          '福克兰群岛':[-59.523613,-51.796253],
          '法国':[2.213749,46.227638],
          '加蓬':[11.609444,-0.803689],
          '英国':[-3.435973,55.378051],
          '格鲁吉亚':[-82.9000751,32.1656221],
          '加纳':[-1.023194,7.946527],
          '几内亚':[-9.696645,9.945587],
          '冈比亚':[-15.310139,13.443182],
          '几内亚比绍':[-15.180413,11.803749],
          '赤道几内亚':[10.267895,1.650801],
          '希腊':[21.824312,39.074208],
          '格陵兰':[-42.604303,71.706936],
          '危地马拉':[-90.23075899999999,15.783471],
          '法属圭亚那':[-53.125782,3.933889],
          '圭亚那':[-58.93018,4.860416],
          '洪都拉斯':[-86.241905,15.199999],
          '克罗地亚':[15.2,45.1],
          '海地':[-72.285215,18.971187],
          '匈牙利':[19.503304,47.162494],
          '印尼':[113.921327,-0.789275],
          '印度':[78.96288,20.593684],
          '爱尔兰':[-8.24389,53.41291],
          '伊朗':[53.688046,32.427908],
          '伊拉克':[43.679291,33.223191],
          '冰岛':[-19.020835,64.963051],
          '以色列':[34.851612,31.046051],
          '意大利':[12.56738,41.87194],
          '牙买加':[-77.297508,18.109581],
          '约旦':[36.238414,30.585164],
          '日本':[138.252924,36.204824],
          '哈萨克斯坦':[66.923684,48.019573],
          '肯尼亚':[37.906193,-0.023559],
          '吉尔吉斯斯坦':[74.766098,41.20438],
          '柬埔寨':[104.990963,12.565679],
          '韩国':[127.766922,35.907757],
          '科索沃':[20.902977,42.6026359],
          '科威特':[47.481766,29.31166],
          '老挝':[102.495496,19.85627],
          '黎巴嫩':[35.862285,33.854721],
          '利比里亚':[-9.429499000000002,6.428055],
          '利比亚':[17.228331,26.3351],
          '斯里兰卡':[80.77179699999999,7.873053999999999],
          '莱索托':[28.233608,-29.609988],
          '立陶宛':[23.881275,55.169438],
          '卢森堡':[6.129582999999999,49.815273],
          '拉脱维亚':[24.603189,56.879635],
          '摩洛哥':[-7.092619999999999,31.791702],
          '摩尔多瓦':[28.369885,47.411631],
          '马达加斯加':[46.869107,-18.766947],
          '墨西哥':[-102.552784,23.634501],
          '马其顿':[21.745275,41.608635],
          '马里':[-3.996166,17.570692],
          '缅甸':[95.956223,21.913965],
          '黑山':[19.37439,42.708678],
          '蒙古':[103.846656,46.862496],
          '莫桑比克':[35.529562,-18.665695],
          '毛里塔尼亚':[-10.940835,21.00789],
          '马拉维':[34.301525,-13.254308],
          '马来西亚':[101.975766,4.210484],
          '纳米比亚':[18.49041,-22.95764],
          '新喀里多尼亚':[165.618042,-20.904305],
          '尼日尔':[8.081666,17.607789],
          '尼日利亚':[8.675277,9.081999],
          '尼加拉瓜':[-85.207229,12.865416],
          '荷兰':[5.291265999999999,52.132633],
          '挪威':[8.468945999999999,60.47202399999999],
          '尼泊尔':[84.12400799999999,28.394857],
          '新西兰':[174.885971,-40.900557],
          '阿曼':[55.923255,21.512583],
          '巴基斯坦':[69.34511599999999,30.375321],
          '巴拿马':[-80.782127,8.537981],
          '秘鲁':[-75.015152,-9.189967],
          '菲律宾':[121.774017,12.879721],
          '巴布亚新几内亚':[143.95555,-6.314992999999999],
          '波兰':[19.145136,51.919438],
          '波多黎各':[-66.590149,18.220833],
          '北朝鲜':[127.510093,40.339852],
          '葡萄牙':[-8.224454,39.39987199999999],
          '巴拉圭':[-58.443832,-23.442503],
          '卡塔尔':[51.183884,25.354826],
          '罗马尼亚':[24.96676,45.943161],
          '俄罗斯':[105.318756,61.52401],
          '卢旺达':[29.873888,-1.940278],
          '西撒哈拉':[-12.885834,24.215527],
          '沙特阿拉伯':[45.079162,23.885942],
          '苏丹':[30.217636,12.862807],
          '南苏丹':[31.3069788,6.876991899999999],
          '塞内加尔':[-14.452362,14.497401],
          '所罗门群岛':[160.156194,-9.64571],
          '塞拉利昂':[-11.779889,8.460555],
          '萨尔瓦多':[-88.89653,13.794185],
          '索马里兰':[46.8252838,9.411743399999999],
          '索马里':[46.199616,5.152149],
          '塞尔维亚共和国':[21.005859,44.016521],
          '苏里南':[-56.027783,3.919305],
          '斯洛伐克':[19.699024,48.669026],
          '斯洛文尼亚':[14.995463,46.151241],
          '瑞典':[18.643501,60.12816100000001],
          '斯威士兰':[31.465866,-26.522503],
          '叙利亚':[38.996815,34.80207499999999],
          '乍得':[18.732207,15.454166],
          '多哥':[0.824782,8.619543],
          '泰国':[100.992541,15.870032],
          '塔吉克斯坦':[71.276093,38.861034],
          '土库曼斯坦':[59.556278,38.969719],
          '东帝汶':[125.727539,-8.874217],
          '特里尼达和多巴哥':[-61.222503,10.691803],
          '突尼斯':[9.537499,33.886917],
          '土耳其':[35.243322,38.963745],
          '坦桑尼亚联合共和国':[34.888822,-6.369028],
          '乌干达':[32.290275,1.373333],
          '乌克兰':[31.16558,48.379433],
          '乌拉圭':[-55.765835,-32.522779],
          '美国':[-95.712891,37.09024],
          '乌兹别克斯坦':[64.585262,41.377491],
          '委内瑞拉':[-66.58973,6.42375],
          '越南':[108.277199,14.058324],
          '瓦努阿图':[166.959158,-15.376706],
          '西岸':[35.3027226,31.9465703],
          '也门':[48.516388,15.552727],
          '南非':[22.937506,-30.559482],
          '赞比亚':[27.849332,-13.133897],
          '津巴布韦':[29.154857,-19.015438]};

        var ZGData = [
            [{name:'中国'}, {name:'美国',value:95}],
            [{name:'中国'}, {name:'也门',value:90}],
            [{name:'中国'}, {name:'乌干达',value:80}],
            [{name:'中国'}, {name:'泰国',value:70}],
        ];

        // 小飞机图
        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({
                        fromName: dataItem[0].name,
                        toName: dataItem[1].name,
                        coords: [fromCoord, toCoord]
                    });
                }
            }
            return res;
        };
        // 颜色组 #a6c84c:浅绿;#ffa022:橙色;#46bee9:蓝色
        var color = ['#a6c84c', '#ffa022', '#46bee9'];
        var series = [];
        [['中国',ZGData]].forEach(function (item, i) {
            series.push({
                name: item[0],
                type: 'lines',
                zlevel: 1,
                effect: {
                    show: true,
                    period: 6,
                    trailLength: 0.7,
                    color: '#fff',
                    symbolSize: 3
                },
                lineStyle: {
                    normal: {
                        color: color[i],
                        width: 1,
                        curveness: 0.2
                    }
                },
                data: convertData(item[1])
            },
            {
                // 飞机/线条
                name: item[0],
                type: 'lines',
                zlevel: 2,
                effect: {
                    show: true,
                    period: 6,
                    trailLength: 0,
                    symbol: planePath,
                    symbolSize: 15
                },
                lineStyle: {
                    normal: {
                        // 飞机及线条颜色
                        color: 'red',
                        // 线条粗细
                        width: 5,
                        // 线条透明度
                        opacity: 0.4,
                        curveness: 0.2
                    }
                },
                data: convertData(item[1])
            },
            {
                // 标注点
                name: item[0],
                type: 'effectScatter',
                coordinateSystem: 'geo',
                zlevel: 2,
                // rippleEffect: {
                //     brushType: 'stroke'
                // },
                // label: {
                //     normal: {
                //         show: true,
                //         position: 'right',
                //         formatter: '{b}'
                //     }
                // },
                symbolSize: function (val) {
                    return val[2] / 8;
                },
                // itemStyle: {
                //     normal: {
                //         color: color[i]
                //     }
                // },
                data: item[1].map(function (dataItem) {
                    return {
                        name: dataItem[1].name,
                        value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
                    };
                })
            });
        });

        option = {
            // 整个图标背景颜色
            backgroundColor: '#aacef5',
            title : {
                // 图表标题
                text: '业务范围',
                // 副标题
                subtext: '',
                // 位置
                left: 'center',
                // 字体颜色
                textStyle : {
                    color: '#fff'
                }
            },
            // 提示
            tooltip : {
                trigger: 'item',
                // 提示内容 出发地:{a};目的地:{b};坐标及数值:{c}
                formatter: "{b}"
            },
            // 右下角按钮不同区域
            // legend: {
            //     orient: 'vertical',
            //     top: 'bottom',
            //     left: 'right',
            //     data:['中国 Top10'],
            //     textStyle: {
            //         color: '#fff'
            //     },
            //     selectedMode: 'single'
            // },
            geo: {
                // 地图范围 world or china
                map: 'world',
                label: {
                    emphasis: {
                        show: false
                    }
                },
                // 滚轮缩放
                roam: false,
                itemStyle: {
                    normal: {
                        // 地图区块颜色
                        areaColor: '#ffde7fa1',
                        // 地图区块描边色
                        borderColor: '#404a59'
                    },
                    emphasis: {
                        // 鼠标触碰色
                        areaColor: 'yellow'
                    }
                }
            },
            series: series
        };
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
</script>
本文最后更新于2019-9-26,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

发表评论:

评论列表:

  • 陈小城 Lv 1

    这不是应该前端来搞吗

    • Young小杰 站长

      回复了陈小城:我=技术=运维=修电脑=搞网络=后端=前端=小工

  • 手机扫描二维码
    阅读体验更佳