echarts迁徙图

前段时间在echarts社区,看见别人写的echarts迁徙图,学习并也写了一个

预览地址: https://gallery.echartsjs.com/editor.html?c=xYS-YtzOaf

 

// http://datav.aliyun.com/tools/atlas 阿里云地图选择器 下载需要的数据包
// 左上角 导入数据 插入到代码
let uploadedDataURL = "/asset/get/s/data-1573454139932-lW0kO573.json"

// 标记点
let geoCoordMap = {
    '西安': [108.948024, 34.263161],
    '铜川': [108.979608, 35.016582],
    '宝鸡': [107.14487, 34.369315],
    '咸阳': [108.685117, 34.533439],
    '渭南': [109.802882, 34.499381],
    '延安': [109.49081, 36.596537],
    '汉中': [107.028621, 33.077668],
    '榆林': [109.741193, 38.290162],
    '安康': [109.029273, 32.6903],
    '商洛': [109.939776, 33.868319]
}

//  给value一个随机值
const mapData = []
for (var key in geoCoordMap) {
    mapData.push({
        'name': key,
        'value': parseInt((Math.random() + 1) * 150)
    })
}

// 输出json对象数组,value里包含坐标值和随机值
function convertData (data) {
    const res = []
    for (let i = 0; i < data.length; i++) {
        const geoCoord = geoCoordMap[data[i].name]
        res.push({
            name: data[i].name,
            value: geoCoord.concat(data[i].value)
        })
    }
    return res
}

//  设置目标点, 配置线条指向
function convertToLineData (data) {
    const res = []
    for (let i = 0; i < data.length; i++) {
        // 起点
        let fromCoord = geoCoordMap[data[i].name]
        //  终点,这里设置的西安
        let toCoord = [108.948024, 34.263161]
        res.push([
            {
                coord: fromCoord,
                value: data[i].value
            },
            {
                coord: toCoord
            }
        ])
    }
    return res
}

// 解析地图数据包
$.getJSON(uploadedDataURL, (geoJson) => {
    // 注册地图,传入数据
    echarts.registerMap('echarts', geoJson)
    
    optionMap = {
        timeline: {
            show: false
        },
        baseOption: {
            // 设置地图参数和样式
            geo: {
                show: true,
                map: 'echarts',
                roam: true,
                zoom: 1,
                // 地图中心点, 可调节显示的偏移量
                center: [108.348024, 35.463161],
                label: {
                    // 高亮文字隐藏
                    emphasis: {
                        show: false
                    }
                },
                itemStyle: {
                    normal: {
                        borderColor: '#FF0000',
                        borderWidth: 1,
                        areaColor: {
                            type: 'radial',
                            x: 0.5,
                            y: 0.5,
                            r: 0.8,
                            colorStops: [{
                                offset: 0,
                                // 0% 处的颜色
                                color: 'rgba(0, 0, 0, 0)'
                            },
                            {
                                offset: 1,
                                // 100% 处的颜色
                                color: 'rgba(0, 0, 0, .3)'
                            }]
                        },
                        shadowColor: 'rgba(0, 0, 0, 1)',
                        shadowOffsetX: -2,
                        shadowOffsetY: 2,
                        shadowBlur: 10
                    },
                    emphasis: {
                        // 鼠标悬浮高亮
                        areaColor: 'gray',
                        borderWidth: 0
                    }
                }
            }
        },
        options: [{
            backgroundColor: '#4A4A4A',
            xAxis: {
                show: false
            },
            yAxis: {
                show: false
            },
            series: [{
                // 坐标点参数和样式
                type: 'effectScatter',
                coordinateSystem: 'geo',
                data: convertData(mapData),
                symbolSize: function (val) {
                    return val[2] / 10
                },
                showEffectOn: 'render',
                rippleEffect: {
                    brushType: 'stroke'
                },
                label: {
                    normal: {
                        formatter: '{b}',
                        position: 'right',
                        show: true
                    }
                },
                itemStyle: {
                    normal: {
                        color: '#FF4500',
                        shadowBlur: 10,
                        shadowColor: '#FF4500'
                    }
                }
            },
            {
                // 线条参数和样式
                type: 'lines',
                // 变化频率
                zlevel: 2,
                effect: {
                    show: true,
                    // 箭头指向速度,值越小速度越快
                    period: 4,
                    // 特效尾迹长度,取值0到1,值越大,尾迹越长
                    trailLength: 0.05,
                    symbol: 'arrow',
                    // 图标大小
                    symbolSize: 5
                },
                lineStyle: {
                    normal: {
                        color: '#FF4500',
                        // 尾迹线条宽度
                        width: 1,
                        // 尾迹线条透明度
                        opacity: 1,
                        // 尾迹线条曲直度
                        curveness: 0.3
                    }
                },
                data: convertToLineData(mapData)
            }]
        }]
    }
    myChart.setOption(optionMap)
})
posted @ 2019-12-23 11:15  一杯龙井解千愁  阅读(1955)  评论(1编辑  收藏  举报