利用百度Echart库,完成简单迁徙图

0 准备城市坐标值

/**
 * 全国主要城市的坐标值
 */
var cityCoordiante_var =
{
    '上海': [121.4648,31.2891],
    '东莞': [113.8953,22.901],
    '东营': [118.7073,37.5513],
    '中山': [113.4229,22.478],
    '临汾': [111.4783,36.1615],
    '临沂': [118.3118,35.2936],
    '丹东': [124.541,40.4242],
    '丽水': [119.5642,28.1854],
    '乌鲁木齐': [87.9236,43.5883],
    '佛山': [112.8955,23.1097],
    '保定': [115.0488,39.0948],
    '兰州': [103.5901,36.3043],
    ....
};

1 准备UI素材

//飞机图标矢量图
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 color = ['#a6c84c', '#ffa022', '#46bee9'];

2 准备迁徙数组

2.1 迁入数据
var TochengduData2015 =
[
    [ {name:'上海',value:95},{name:'成都'}],
    [ {name:'广州',value:90},{name:'成都'}],
    [ {name:'大连',value:80},{name:'成都'}],
    [ {name:'南宁',value:70},{name:'成都'}],
    [ {name:'南昌',value:60},{name:'成都'}],
    [ {name:'拉萨',value:50},{name:'成都'}],
    [ {name:'长春',value:40},{name:'成都'}],
    [ {name:'包头',value:30},{name:'成都'}],
    [ {name:'重庆',value:20},{name:'成都'}],
    [ {name:'常州',value:10},{name:'成都'}]
];
2.2 迁出数据
var FromchengduData2016 = [
    [ {name:'成都'},{name:'上海',value:92}],
    [ {name:'成都'},{name:'广州',value:91}],
    [ {name:'成都'},{name:'大连',value:82}],
    [ {name:'成都'},{name:'南宁',value:73}],
    [ {name:'成都'},{name:'南昌',value:66}],
    [ {name:'成都'},{name:'拉萨',value:57}],
    [ {name:'成都'},{name:'长春',value:48}],
    [ {name:'成都'},{name:'包头',value:39}],
    [ {name:'成都'},{name:'重庆',value:20}],
    [ {name:'成都'},{name:'常州',value:11}]
];

3 填充迁徙数据Series

3.1 将迁徙数据改写为地图中的连线形式
var LineCities = function (data) 
{
    //准备结果数组
    var res = [];
    //遍历参数数组,参数格式如2.1或2.2所示
    for (var i = 0; i < data.length; i++) 
    {
        //获取一条记录
        var dataItem = data[i];
        //利用切片方式,通过name属性,获得城市列表中城市的坐标
        var fromCoord = cityCoordiante_var[dataItem[0].name];
        var toCoord = cityCoordiante_var[dataItem[1].name];
        //如果起、止城市都获得成功
        if (fromCoord && toCoord)
        {
            //按照json对象存入res数组中
            res.push
            ({
                fromName: dataItem[0].name,
                toName: dataItem[1].name,
                coords: [fromCoord, toCoord]
            });
        }
    }
    //返回结果
    return res;
};
3.2 高亮指定城市
/**
 * 利用城市名称-值,实现地图高亮
 * @param {Object} cityName 城市名
 * @param {Object} value 值
 */
var markerCity = function (cityName,value)
{
    var res = [];
    var geoCoord = cityCoordiante_var[cityName];
    if (geoCoord) 
    {
        if(value==undefined)
            value=100;
        res.push({name: cityName,value: geoCoord.concat(value)});
    }
    return res;
};
3.3 填装迁徙数据
/**
 * 填装迁徙数据
 * @param {Object} data [[{name:fromcity,value:fromvalue},{name:tocity,value:tocity}]]
 * @param {Object} isFrom 是迁入还是迁出数据
 */
var fullLineCityData=function(data,isFrom)
{
    index=isFrom?0:1;
    var res = [];
    data.map(function (dataItem)
    {
        res.push
        ({
            name:dataItem[index].name,
            value: cityCoordiante_var[dataItem[index].name].concat([dataItem[index].value])
            /**注意value的格式 [lat,lon,value] 一定是数组包裹的*/
        }); 
    });
    return res;
}
3.4 迁徙数据可视化设置
/**
 * 填装迁徙数据集合(谨慎修改)
 * @param {Object} MigraineData 填装数据集合
 */
var FullMigraineData= function(MigraineData,isTo)
{
    if(isTo==undefined)
        isTo=true;
    /**
     * 准备数据集合
     */
    var series = [];
    /**
     * 从TochengduData2015数据集中遍历数据
     */
    [['成都', MigraineData]].forEach(function (item, i) 
        {
            series.push
            (
            {
                /*高亮迁徙动画效果*/
                name: item[0] + ' Top10',
                type: 'lines',
                zlevel: 1,
                effect: 
                {
                    show: true,
                    period: 6,
                    trailLength: 0.7,
                    color: '#fff',
                    symbolSize: 3
                },
                lineStyle: 
                {
                    normal: 
                    {
                        color: color[i],
                        width: 0,
                        curveness: 0.2
                    }
                },
                data: LineCities(item[1])//绘制城市连接线
            },
            /*迁徙线飞机效果*/
            {
                name: item[0] + ' Top10',
                type: 'lines',
                zlevel: 2,
                symbol: ['none', 'arrow'],
                symbolSize: 10,
                effect: 
                {
                    show: true,
                    period: 6,
                    trailLength: 0,
                    symbol: planePath,
                    symbolSize: 15
                },
                lineStyle: 
                {
                   normal: {color: color[i],width: 1,opacity: 0.6,curveness: 0.2}
                },
                data: LineCities(item[1])//绘制城市连接线
            },
            {
                /*高亮迁入地区*/
                name: item[0] + ' Top10',
                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: fullLineCityData(item[1],isTo)
            },
            {
                /*高亮迁出区域*/
                name: item[0] + ' Top10',
                type: 'effectScatter',
                coordinateSystem: 'geo',
                zlevel: 3,
                rippleEffect: {brushType: 'stroke'},
                label: 
                {
                    normal: 
                    {
                        show: true,
                        position: 'right',
                        formatter: '{b}'
                    }
                },
                symbolSize: function (val) 
                {
                    return val[2] / 8;
                },
                itemStyle: 
                {
                    normal: {color: color[1]}
                },
                data: markerCity(item[0])//高亮迁出区域
            }
            );
        });
    return  series;
}

4 构建地图对象

            /**设置迁入数据*/
            var series = FullMigraineData(TochengduData2015,true);
            /**设置迁出数据*/
            //var series = FullMigraineData(FromchengduData2016,false);
            /**设置地图样式(可修改样式)*/
            option = 
            {
                backgroundColor: '#121212',
                title : 
                {
                    text: '模拟迁徙',
                    subtext: '数据纯属虚构',
                    left: 'center',
                    textStyle : {color: '#fff'}
                },
                tooltip : {trigger: 'item'},
                legend: 
                {
                    orient: 'vertical',
                    top: 'bottom',
                    left: 'right',
                    data:['成都 Top10'],
                    textStyle: {olor: '#fff'},
                    selectedMode: 'single'
                },
                geo: 
                {
                    map: 'china',
                    label: {emphasis: {show: false}},
                    roam: true,
                    itemStyle: 
                    {
                        normal: {areaColor: '#323c48',borderColor: '#404a59'},
                        emphasis: {areaColor: '#2a333d'}
                    }
                },
                series: series
            };
            //绑定迁徙地图
            var myChart = echarts.init(document.getElementById('MigraineMap'));
            myChart.setOption(option);
百度Echarts是一款非常强大的可视化,支持多种表类型,包括迁徙。下面我将为您介绍如何利用百度Echarts生成人口迁徙(产品流向)。 首先,我们需要准备好数据。人口迁徙通常需要两个地点之间的迁移数据,包括起点、终点和迁移人数。例如: ``` var data = [{ fromName: '北京', toName: '上海', value: 100 }, { fromName: '北京', toName: '广州', value: 50 }, { fromName: '北京', toName: '深圳', value: 30 }, { fromName: '上海', toName: '北京', value: 90 }, { fromName: '上海', toName: '广州', value: 80 }, { fromName: '上海', toName: '深圳', value: 60 }]; ``` 接下来,我们需要引入百度Echarts并创建一个容器来显示表。例如: ``` <!-- 引入百度Echarts --> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.9.0/echarts.min.js"></script> <!-- 创建容器 --> <div id="myChart" style="width: 100%; height: 500px;"></div> ``` 然后,我们可以使用以下代码来生成迁徙: ``` // 初始化echarts实例 var chart = echarts.init(document.getElementById('myChart')); // 配置项 var option = { tooltip: { trigger: 'item', formatter: '{b}' }, series: [{ type: 'lines', zlevel: 2, effect: { show: true, period: 6, trailLength: 0.1, symbolSize: 5 }, lineStyle: { normal: { opacity: 0.6, width: 1, curveness: 0.2 } }, data: data.map(function(item) { return { fromName: item.fromName, toName: item.toName, coords: [ [geoCoordMap[item.fromName].lng, geoCoordMap[item.fromName].lat], [geoCoordMap[item.toName].lng, geoCoordMap[item.toName].lat] ], value: item.value } }) }] }; // 使用刚指定的配置项和数据显示表 chart.setOption(option); ``` 以上代码中,`data`是我们准备好的数据,`option`是配置项,其中`series`的`type`为`lines`表示迁徙类型。`data`中的每一项包括起点、终点和迁移人数,`map`方法用来将城市名称转换为经纬度坐标,这里假设已经定义了`geoCoordMap`对象,用来存储城市名称和经纬度坐标的映射关系。 最后,我们使用`setOption`方法将配置项和数据应用到表中,就可以生成人口迁徙(产品流向)了。 希望以上内容能对您有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值