echarts实现中国疫情地图

作者 : 开心源码 本文共7423个字,预计阅读时间需要19分钟 发布时间: 2022-05-13 共258人阅读

最近每天早上醒来第一件事就是看看当天新添加人数能否减少了,出院了多少,每个省目前还有多少确诊人数,见到最多的就是中国地图的分布图,因为工作需要,自己也使用echarts实现了一个。效果如下:

image.png

一:认识echarts

ECharts,缩写来自 Enterprise Charts,商业级数据图表,是百度的一个开源的数据可视化工具,一个纯 Javascript 的图表库。目前很多商业项目都在使用,不但好用而且是免费。

二:实现步骤

1.官网上面有很多实例可供大家参考,这个是地图实例的链接:https://www.echartsjs.com/examples/en/editor.html?c=doc-example/map-visualMap-pieces&edit=1

2.在页面左侧框中输入以下数据:

option = {    title: {        text: '中国疫情图',        left: 'center'    },    tooltip: {        trigger: 'item'    },    legend: {        orient: 'vertical',        left: 'left',        data: ['中国疫情图']    },    visualMap: {        type: 'piecewise',        pieces: [            {min: 1000, max: 1000000, label: '大于等于1000人', color: '#372a28'},            {min: 500, max: 999, label: '确诊500-999人', color: '#4e160f'},            {min: 100, max: 499, label: '确诊100-499人', color: '#974236'},            {min: 10, max: 99, label: '确诊10-99人', color: '#ee7263'},            {min: 1, max: 9, label: '确诊1-9人', color: '#f5bba7'},        ],        color: ['#E0022B', '#E09107', '#A3E00B']    },    toolbox: {        show: true,        orient: 'vertical',        left: 'right',        top: 'center',        feature: {            mark: {show: true},            dataView: {show: true, readOnly: false},            restore: {show: true},            saveAsImage: {show: true}        }    },    roamController: {        show: true,        left: 'right',        mapTypeControl: {            'china': true        }    },    series: [        {            name: '确诊数',            type: 'map',            mapType: 'china',            roam: false,            label: {                show: true,                color: 'rgb(249, 249, 249)'            },            data: [               {                  name: '北京',                  value: 212                }, {                  name: '天津',                  value: 60                }, {                  name: '上海',                  value: 208                }, {                  name: '重庆',                  value: 337                }, {                  name: '河北',                  value: 126                }, {                  name: '河南',                  value: 675                }, {                  name: '云南',                  value: 117                }, {                  name: '辽宁',                  value: 74                }, {                  name: '黑龙江',                  value: 155                }, {                  name: '湖南',                  value: 593                }, {                  name: '安徽',                  value: 480                }, {                  name: '山东',                  value: 270                }, {                  name: '新疆',                  value: 29                }, {                  name: '江苏',                  value: 308                }, {                  name: '浙江',                  value: 829                }, {                  name: '江西',                  value: 476                }, {                  name: '湖北',                  value: 13522                }, {                  name: '广西',                  value: 139                }, {                  name: '甘肃',                  value: 55                }, {                  name: '山西',                  value: 74                }, {                  name: '内蒙古',                  value: 34                }, {                  name: '陕西',                  value: 142                }, {                  name: '吉林',                  value: 42                }, {                  name: '福建',                  value: 179                }, {                  name: '贵州',                  value: 56                }, {                  name: '广东',                  value: 797                }, {                  name: '青海',                  value: 15                }, {                  name: '西藏',                  value: 1                }, {                  name: '四川',                  value: 282                }, {                  name: '宁夏',                  value: 34                }, {                  name: '海南',                  value: 79                }, {                  name: '台湾',                  value: 10                }, {                  name: '香港',                  value: 15                }, {                  name: '澳门',                  value: 9                }            ]        }    ]};

此时页面右侧就会渲染出中国疫情地图了。以上是Echarts的Example环境,真实项目中需要加入china.js。

3.在自己的项目中如何使用echarts实现疫情图,静态页面代码如下:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>疫情地图展现</title>  <style>    #myEcharts {      width: 800px;      height: 500px;      border: solid 1px red;      margin: 0 auto;    }  </style>  <!-- 引入 echarts.js -->  <script src="https://www.echartsjs.com/examples/vendors/echarts/echarts.min.js?_v_=1578305236132"></script>  <!--引入中国的地图数据js文件,引入后会自动注册地图名字和数据-->  <script src="https://www.echartsjs.com/examples/vendors/echarts/map/js/china.js?_v_=1578305236132"></script></head><body>  <!--为echarts准备一个dom容器-->  <div id="myEcharts"></div>  <script>    //初始化echarts实例    var myChart = echarts.init(document.getElementById('myEcharts'));    // 指定图表的配置项和数据    option = {      title: {        text: '中国疫情图',        left: 'center'      },      tooltip: {        trigger: 'item'      },      legend: {        orient: 'vertical',        left: 'left',        data: ['中国疫情图']      },      visualMap: {        type: 'piecewise',        pieces: [          { min: 1000, max: 1000000, label: '大于等于1000人', color: '#372a28' },          { min: 500, max: 999, label: '确诊500-999人', color: '#4e160f' },          { min: 100, max: 499, label: '确诊100-499人', color: '#974236' },          { min: 10, max: 99, label: '确诊10-99人', color: '#ee7263' },          { min: 1, max: 9, label: '确诊1-9人', color: '#f5bba7' },        ],        color: ['#E0022B', '#E09107', '#A3E00B']      },      toolbox: {        show: true,        orient: 'vertical',        left: 'right',        top: 'center',        feature: {          mark: { show: true },          dataView: { show: true, readOnly: false },          restore: { show: true },          saveAsImage: { show: true }        }      },      roamController: {        show: true,        left: 'right',        mapTypeControl: {          'china': true        }      },      series: [        {          name: '确诊数',          type: 'map',          mapType: 'china',          roam: false,          label: {            show: true,            color: 'rgb(249, 249, 249)'          },          data: [            {              name: '北京',              value: 212            }, {              name: '天津',              value: 60            }, {              name: '上海',              value: 208            }, {              name: '重庆',              value: 337            }, {              name: '河北',              value: 126            }, {              name: '河南',              value: 675            }, {              name: '云南',              value: 117            }, {              name: '辽宁',              value: 74            }, {              name: '黑龙江',              value: 155            }, {              name: '湖南',              value: 593            }, {              name: '安徽',              value: 480            }, {              name: '山东',              value: 270            }, {              name: '新疆',              value: 29            }, {              name: '江苏',              value: 308            }, {              name: '浙江',              value: 829            }, {              name: '江西',              value: 476            }, {              name: '湖北',              value: 13522            }, {              name: '广西',              value: 139            }, {              name: '甘肃',              value: 55            }, {              name: '山西',              value: 74            }, {              name: '内蒙古',              value: 34            }, {              name: '陕西',              value: 142            }, {              name: '吉林',              value: 42            }, {              name: '福建',              value: 179            }, {              name: '贵州',              value: 56            }, {              name: '广东',              value: 797            }, {              name: '青海',              value: 15            }, {              name: '西藏',              value: 1            }, {              name: '四川',              value: 282            }, {              name: '宁夏',              value: 34            }, {              name: '海南',              value: 79            }, {              name: '台湾',              value: 10            }, {              name: '香港',              value: 15            }, {              name: '澳门',              value: 9            }          ]        }      ]    };    //使用指定的配置项和数据显示图表    myChart.setOption(option);  </script></body></html>

4.数据调取
数据使用腾讯的数据:接口地址:https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery34102581268431257997_1582545445186&_=1582545445187

image.png

拿到数据后,发现数据格式是这样子的:

image.png

这个数据是腾讯根据自己的需求组装好的数据格式,我们需要用到的是areaTree下面的children。拿到数据后我们需要解决成图表需要的数据格式。需要的格式是这样子的:

        [{          name: '北京11',          value: 212        }, {          name: '天津',          value: 60        }]

直接上对接数据后的代码:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>疫情地图展现</title>  <style>    .container {      width: 1200px;      margin: 0 auto;    }    #myEcharts {      width: 800px;      height: 500px;      border: solid 1px red;      margin: 0 auto;    }  </style>  <script src="https://www.echartsjs.com/examples/vendors/jquery/jquery.js"></script>  <!-- 引入 echarts.js -->  <script src="https://www.echartsjs.com/examples/vendors/echarts/echarts.min.js?_v_=1578305236132"></script>  <!--引入中国的地图数据js文件,引入后会自动注册地图名字和数据-->  <script src="https://www.echartsjs.com/examples/vendors/echarts/map/js/china.js?_v_=1578305236132"></script></head><body>  <div class="container">    <h3>累计确诊人数如下:</h3>    <!--为echarts准备一个dom容器-->    <div id="myEcharts"></div>  </div>  <script>    //初始化echarts实例    var myChart = echarts.init(document.getElementById('myEcharts'));    // 指定图表的配置项和数据    option = {      title: {        text: '中国疫情图',        left: 'center'      },      tooltip: {        trigger: 'item'      },      legend: {        orient: 'vertical',        left: 'left',        data: ['中国疫情图']      },      visualMap: {        type: 'piecewise',        pieces: [          { min: 1000, max: 1000000, label: '大于等于1000人', color: '#372a28' },          { min: 500, max: 999, label: '确诊500-999人', color: '#4e160f' },          { min: 100, max: 499, label: '确诊100-499人', color: '#974236' },          { min: 10, max: 99, label: '确诊10-99人', color: '#ee7263' },          { min: 1, max: 9, label: '确诊1-9人', color: '#f5bba7' },        ],        color: ['#E0022B', '#E09107', '#A3E00B']      },      toolbox: {        show: true,        orient: 'vertical',        left: 'right',        top: 'center',        feature: {          mark: { show: true },          dataView: { show: true, readOnly: false },          restore: { show: true },          saveAsImage: { show: true }        }      },      roamController: {        show: true,        left: 'right',        mapTypeControl: {          'china': true        }      },      series: [        {          name: '确诊数',          type: 'map',          mapType: 'china',          roam: false,          label: {            show: true,            color: 'rgb(249, 249, 249)'          },          data: []        }      ]    };    //使用指定的配置项和数据显示图表    myChart.setOption(option);    //获取数据    function getData() {      $.ajax({        url: "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5",        dataType: "jsonp",        success: function (data) {          //  console.log(data.data)          var res = data.data || "";          res = JSON.parse(res);          var newArr = [];          //newArr的数据格式为:          // [{          //   name: '北京11',          //   value: 212          // }, {          //   name: '天津',          //   value: 60          // }]          if (res) {            //获取到各个省份的数据            var province = res.areaTree[0].children;            for (var i = 0; i < province.length; i++) {              var json = {                name: province[i].name,                value: province[i].total.confirm              }              newArr.push(json)            }            console.log(newArr)            console.log(JSON.stringify(newArr))            //使用指定的配置项和数据显示图表            myChart.setOption({              series: [                {                  name: '确诊数',                  type: 'map',                  mapType: 'china',                  roam: false,                  label: {                    show: true,                    color: 'rgb(249, 249, 249)'                  },                  data: newArr                }              ]            });          }        }      })    }    getData();  </script></body></html>

三:知识点解析:

option参数的含义:

  • title:显示图标的标题
  • tooltip:展现提醒框,当你鼠标点击某个省份时用来展现对应确实诊人数
  • legend:图例,设置图例展现的位置
  • visualMap:视觉映射,每个颜色代表什么含义
  • series:地图数据可视化,增加data数据

最后再给大家一个友好建议:
1、插件自带的地图省份名字是默认出现在省会城市的位置,导致很多省份的名字有点挤甚至偏移,大家可以打开map/js/china.js

2、检索自己想要更改的省份名字,如湖南
“properties”:{“cp”:[112.982279,28.19409],”name”:”湖南”,”childNum”:3}}
其中cp即表示文字的位置,两个坐标表示经纬度,大家根据需要调整。有兴趣的小伙伴可以试试哦!

对echarts还不熟习的同学可以先看一遍官方教程哦,地址如下:https://www.echartsjs.com/zh/tutorial.html

待完善。。。

疫情中一个个感人的瞬间,每天都是满满的感动,太多感谢的话都会显得那么苍白无力,只希望疫情赶快过去。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » echarts实现中国疫情地图

发表回复