zion0707

1、因为业务要用到城市数据展示,由于echartsjs 中国地图及省份地图已经找不到demo了,所以只能在网上找对应的文章,但是找到的文章也不太符合自己的代码习惯,决定自己来编写吧。

2、网上很多文章要么就是代码不全,要么就是代码比较多,比较难于理解,所以着手自己整理一份。

3、地图展示,单击即可全国或省份切换

 

4、使用npm下载最新的 echarts ,$ cnpm i echarts 下载到本地,然后里面包含了china,及省份地图;

5、目录结构

 

 6、index.html 代码展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>echarts</title>
<style>
*{padding: 0;margin: 0;}
#china{
    background-color: #f1f1f1;
}
</style>
</head>
<body>

    <div id="china" style="width:100%;height:600px;"></div>
    
<script src="./node_modules/jquery/dist/jquery.min.js"></script>
<script src="./node_modules/_echarts@4.6.0@echarts/dist/echarts.min.js"></script>
<script src="./node_modules/_echarts@4.6.0@echarts/map/js/china.js"></script>
<!-- <script src="./node_modules/_echarts@4.6.0@echarts/map/js/province/guangdong.js"></script> -->
<script src="./js/init.js"></script>
</body>
</html>

7、init.js 代码展示

var myChart = echarts.init(document.getElementById(\'china\'));

var option = {
    tooltip:{
        show:true,
        formatter:function(params){
            if(params.data){
                return params.name+\'<br/>人数:\'+params.data.value[0]+\'<br/>设备:\'+params.data.value[1]
            }
        }
    },
    visualMap: {
        type:\'continuous\',
        orient: \'horizontal\', //控制条横向
        bottom:20,
        min: 0,
        max: 10000,
        inRange: {
            color: [\'#ffd200\',\'#ff0000\']
        },
        text: [\'高\', \'低\'],  //
        // calculable: true, //是否显示拖把
    },
    series:[
        {
            type:\'map\',
            mapType:\'china\',
            // roam:true,
            label: {
                show: true
            },
            // 区域颜色
            itemStyle:{
                areaColor:\'#ffff00\' 
            },
            //鼠标聚焦时的区域颜色
            emphasis:{
                itemStyle:{
                    areaColor:\'#dede00\'
                }
            },
            //虚拟数据
            data:[{
                name: \'北京\',
                value: [1000, 5000]
            }, {
                name: \'广东\',
                value: [200, 300]
            }], 
        }
    ],
};

myChart.setOption(option);

//定义全国省份的数组
var cityArr=[
    [\'上海\', \'河北\', \'山西\', \'内蒙古\', \'辽宁\', \'吉林\',\'黑龙江\',  \'江苏\', \'浙江\', \'安徽\', \'福建\', \'江西\', \'山东\',\'河南\', \'湖北\', \'湖南\', \'广东\', \'广西\', \'海南\', \'四川\', \'贵州\', \'云南\', \'西藏\', \'陕西\', \'甘肃\', \'青海\', \'宁夏\', \'新疆\', \'北京\', \'天津\', \'重庆\', \'香港\', \'澳门\', \'台湾\'],
    [\'shanghai\', \'hebei\',\'shanxi\',\'neimenggu\',\'liaoning\',\'jilin\',\'heilongjiang\',\'jiangsu\',\'zhejiang\',\'anhui\',\'fujian\',\'jiangxi\',\'shandong\',\'henan\',\'hubei\',\'hunan\',\'guangdong\',\'guangxi\',\'hainan\',\'sichuan\',\'guizhou\',\'yunnan\',\'xizang\',\'shanxi1\',\'gansu\',\'qinghai\',\'ningxia\',\'xinjiang\', \'beijing\', \'tianjin\', \'chongqing\', \'xianggang\', \'aomen\', \'taiwan\']
];

myChart.on(\'click\', function (param) {
    // 城市中文名
    var cityName = param.name;
    // 查找是否有对应城市有则加载城市
    for(var i=0,len=cityArr[0].length;i<len;i++){
        if(cityName==cityArr[0][i]){
            // 获取得城市拼音
            showCity(cityArr[0][i], cityArr[1][i]);
            return;
        }
    }
    //没有找到对应城市的话,那么返回到全国地图 
    option.series[0].mapType=\'china\';
    myChart.setOption(option);
});


// 定义省份
/**
 * 
 * @param {城市中文名} zhName 
 * @param {城市拼音名} pyName 
 */ 
function showCity(zhName, pyName){
    console.log(zhName, pyName);
    $.getScript(\'./node_modules/_echarts@4.6.0@echarts/map/js/province/\'+pyName+\'.js\', function(){
        // 设定中文省份名才能显示相关省份,之后想要设置什么数据,直接设置到option这里就可以了
        option.series[0].mapType=zhName;

        // 深拷贝,另建option以免丢失原始option数据
        var cityOption = JSON.parse(JSON.stringify(option));
        // 模拟虚拟数据
        if(zhName==\'广东\'){
            cityOption.series[0].data=[{
                name: \'梅州市\',
                value: [100, 100]
            }, {
                name: \'深圳市\',
                value: [100, 200]
            }]
        }else if(zhName==\'北京\'){
            cityOption.series[0].data=[{
                name: \'海淀区\',
                value: [500, 1000]
            }, {
                name: \'朝阳区\',
                value: [500, 4000]
            }]
        }

        myChart.setOption(cityOption);
    });
}

// 地图跟随浏览器缩放
window.onresize=function(){
    myChart.resize();
}

 

分类:

技术点:

相关文章: