ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Echarts 在地图上绘制流向图

2021-09-06 16:33:04  阅读:565  来源: 互联网

标签:dataItem color data value 流向 params var 绘制 Echarts


首先需要获取地图JSON数据包,点此下载(Echarts官方地图数据,包含世界、中国,及国内各省数据)。

实现效果如图:

代码如下:

$.getJSON('./mapjson/china.json', function(china)
{
    echarts.registerMap('china', china);
    
    var myChart = echarts.init(document.getElementById('map'));
    myChart.showLoading(
    {
        text: '加载中...',
        color: '#c23531',
        fontSize: '28px',
        textColor: '#000',
        maskColor: 'rgba(255, 255, 255, 0.2)',
        zlevel: 0,
    });
    
    var scale = 1;
    
    var geoCoordMap = {};
    echarts.util.each(china.features, function(dataItem, idx)
    {
        geoCoordMap[dataItem.properties.name] = dataItem.properties.cp;
    });
    
    var mapData =
    [
        {from: '青海', to: '青海', value: 90, color: '#1DE9B6'},
        {from: '青海', to: '安徽', value: 80, color: '#ACC5E9'},
        {from: '青海', to: '甘肃', value: 70, color: '#FFDB5C'},
        {from: '青海', to: '宁夏', value: 60, color: '#3D552A'},
        {from: '青海', to: '山西', value: 50, color: '#B4B9FF'},
        {from: '青海', to: '陕西', value: 40, color: '#A6C84C'},
        {from: '青海', to: '广东', value: 30, color: '#FFA022'},
        {from: '青海', to: '重庆', value: 20, color: '#46BEE9'},
        {from: '青海', to: '西藏', value: 10, color: '#FAC55C'}
    ];
    
    var convertLineData = function(data)
    {
        var res = [];
        
        for(var i = 0; i < data.length; i++)
        {
            var dataItem = data[i];
            var fromCoord = geoCoordMap[dataItem.from];
            var toCoord = geoCoordMap[dataItem.to];
            
            if(fromCoord && toCoord)
            {
                res.push(
                {
                    fromName: dataItem.from,
                    toName: dataItem.to,
                    coords: [fromCoord, toCoord],
                    value: dataItem.value,
                    color: dataItem.color
                });
            }
        }
        
        return res;
    };
    
    var convertPointData = function(data)
    {
        var res = [];
        
        for(var i = 0; i < data.length; i++)
        {
            var dataItem = data[i];
            var toCoord = geoCoordMap[dataItem.to];
            
            if(toCoord)
            {
                res.push(
                {
                    name: dataItem.to,
                    value: toCoord,
                    count: dataItem.value,
                    color: dataItem.color
                });
            }
        }
        
        return res;
    }
    
    var option =
    {
        tooltip:
        {
            trigger: 'item',
            axisPointer:
            {
                type: 'shadow'
            },
            textStyle:
            {
                fontSize: 12 * scale,
            },
            formatter: function(params)
            {
                let returnStr = '';
                
                if(params.componentSubType == 'effectScatter')
                {
                    returnStr += params.marker;
                    returnStr += params.name + ':' + params.data.count;
                }
                else if(params.componentSubType == 'lines')
                {
                    returnStr += params.marker;
                    returnStr += params.data.fromName + ' -> ' + params.data.toName;
                    returnStr += ':' + params.data.value;
                }
                
                return returnStr;
            }
        },
        geo:
        {
            map: 'china',
            aspectScale: 1,
            zoom: 1.25,
            label:
            {
                normal:
                {
                    show: false,
                },
                emphasis:
                {
                    show: true,
                    fontSize: 12 * scale,
                    color:"#fff"
                }
            },
            itemStyle:
            {
                normal:
                {
                    areaColor:
                    {
                        x: 0, y: 0, x2: 0, y2: 1,
                        colorStops: 
                        [
                            {
                                offset: 0,
                                color: '#08429F'
                            },
                            {
                                offset: 1,
                                color: '#061E3D'
                            },
                        ],
                    },
                    borderColor: '#215495',
                    borderWidth: 2 * scale,
                },
                emphasis:
                {
                    areaColor:
                    {
                        x: 0, y: 0, x2: 0, y2: 1,
                        colorStops:
                        [
                            {
                                offset: 0,
                                color: '#084DBC'
                            },
                            {
                                offset: 1,
                                color: '#092F5E'
                            },
                        ],
                    },
                }
            },
        },
        series: 
        [
            {
                type: 'effectScatter',
                coordinateSystem: 'geo',
                data: convertPointData(mapData),
                symbolSize: 15 * scale,
                showEffectOn: 'render',
                rippleEffect: 
                {
                    brushType: 'stroke'
                },
                hoverAnimation: true,
                label:
                {
                    normal: 
                    {
                        show: true,
                        formatter: function(param)
                        {
                            return param.data.name;
                        },
                        position: 'right',
                        fontSize: 12 * scale,
                        color: '#fff',
                    }
                },
                itemStyle: 
                {
                    normal: 
                    {
                        color: function(param)
                        {
                            return param.data.color;
                        },
                        shadowBlur: 10,
                        shadowColor: '#fff'
                    }
                },
                zlevel: 1
            },
            {
                type: 'lines',
                zlevel: 2,
                effect: 
                {
                    show: true,
                    period: 5,
                    trailLength: 0.2,
                    symbol: 'arrow',
                    symbolSize: 4 * scale,
                },
                lineStyle: 
                {
                    normal: 
                    {
                        color: function(param)
                        {
                            return param.data.color;
                        },
                        width: 1 * scale,
                        opacity: 0.2,
                        curveness: .3
                    }
                },
                data: convertLineData(mapData)
            },
        ]
    };
    
    myChart.hideLoading();
    myChart.setOption(option, true);
    myChart.resize();
})

 

标签:dataItem,color,data,value,流向,params,var,绘制,Echarts
来源: https://www.cnblogs.com/XiaoMingBlingBling/p/15234399.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有