首页 > 技术文章 > 全国疫情统计地图可视化(1)--实现地图可视化显示

wushenjiang 2020-03-04 22:15 原文

写在前面

该思路借鉴了王正帅同学和张凯鑫同学的博客(地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/12405503.htmlhttps://www.cnblogs.com/wuren-best/p/12404361.html),并在其基础上进行了修改和改进。

题目要求:

  • 在全国地图上使用不同的颜色代表大概确诊人数区间,颜色的深浅表示疫情的严重程度,可以直观了解高危区域;
  • 鼠标移到每个省份会高亮显示、点击鼠标会显示该省具体疫情情况、点击某个省份显示该省疫情的具体情况
  • 显示该省份对应的感染患者人数、疑似患者人数、治愈人数、死亡人数;

实现思路:

首先我们理解题目,在全国地图可视化的显示各个区域的疫情情况,则我们首先需要一个中国地图(echarts),然后从数据库读取数据,即可在web中显示,其他的目标可进行各种的样式设置。以下为具体步骤:

  • 1.为地图提供一个div容器,并设置一个id以便绑定地图.
  • 2.导入china.js以便显示中国地图(最下面提供下载地址)。
  • 3.通过ajax从数据库读取数据,并对数据做适配性修改,转换成适合echarts的格式(json转数组)。
  • 4.拿到数据后对echarts的样式进行设置以便符合要求。

效果截图:

部分代码:

前台代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>地图显示界面</title>
<script src="./js/jquery-1.11.3.min.js"></script>
<script src="./js/echarts.min.js"></script>
<script src="./js/china.js"></script>
<script src="./js/china-main-city-map.js"></script>
<style>
* {
	margin: 0;
	padding: 0
}

html, body {
	width: 100%;
	height: 100%;
}

#map {
	width: 800px;
	height: 600px;
	margin: 150px auto;
	border: 1px solid #ddd;
}
/*建议长宽比0.75,符合审美*/
</style>
</head>
<body>
	<div id="map"></div>
	<script>
	var postURL = "/Course3/GetJson";
	var mydata1 = new Array();
	var chart = echarts.init(document.getElementById("map"));
	//设置成同步
	$.ajaxSettings.async = false;
	$.post(postURL, {}, function(rs) {
		var dataList = JSON.parse(rs);
		for(var i=0;i<dataList.length;i++)
		{
			var d={};
			d['name'] = dataList[i].province;
			d['value']  = dataList[i].confirmed_num;
			d['yisi_num'] = dataList[i].yisi_num;
			d['cured_num'] = dataList[i].cured_num;
			d['dead_num'] = dataList[i].dead_num;
			mydata1.push(d);
		}
	});
	//设置成异步
	$.ajaxSettings.async = true;
	var option = {
		//大标题
		title : {
			text : '全国各省疫情图',
			subtext : '',
			x : 'center'
		},
		//设置鼠标移上去的悬浮菜单
		tooltip : {
			formatter : function(params) {
				return params.name + '<br/>'+'确诊人数:'
						+ params.value +"<br/>"+'疑似患者人数:'
						+ params['data'].yisi_num  +"<br/>"+'治愈人数:'
						+ params['data'].cured_num + "<br/>"+'死亡人数:'
						+ params['data'].dead_num;
			}//数据格式化
		},
		//左侧小导航
		visualMap : {
			min : 0,
			max : 500,
			inRange : {
				color : [ '#ffaa85', '#FF7F50','#bc1a19' ]
			//取值范围的颜色
			},
			pieces:[
				{gt:1000},
				{gt:500,lte:999},
				{gte:1,lte:499},
				{value:0,label:'0',color:'#ffffff'},
			],
			show : true
		//图注
		},
		series : [ {
			type : 'map',
			mapType : 'china',
			data : mydata1,
			nameMap : {
				'南海诸岛' : '南海诸岛',
				'北京' : '北京市',
				'天津' : '天津市',
				'上海' : '上海市',
				'重庆' : '重庆市',
				'河北' : '河北省',
				'河南' : '河南省',
				'云南' : '云南省',
				'辽宁' : '辽宁省',
				'黑龙江' : '黑龙江省',
				'湖南' : '湖南省',
				'安徽' : '安徽省',
				'山东' : '山东省',
				'新疆' : '新疆维吾尔自治区',
				'江苏' : '江苏省',
				'浙江' : '浙江省',
				'江西' : '江西省',
				'湖北' : '湖北省',
				'广西' : '广西壮族自治区',
				'甘肃' : '甘肃省',
				'山西' : '山西省',
				'内蒙古' : "内蒙古自治区",
				'陕西' : '陕西省',
				'吉林' : '吉林省',
				'福建' : '福建省',
				'贵州' : '贵州省',
				'广东' : '广东省',
				'青海' : '青海省',
				'西藏' : '西藏自治区',
				'四川' : '四川省',
				'宁夏' : '宁夏回族自治区',
				'海南' : '海南省',
				'台湾' : '台湾',
				'香港' : '香港',
				'澳门' : '澳门'
			}
		} ]
	};
	chart.setOption(option);
    chart.on('click', function (params) {
        var url = "${pageContext.request.contextPath }/provinceMap?province=" + params.name;
        window.location.href = url;
    });
</script>
</body>
</html>

servlet代码:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		DataService  dataservice = new DataService();
		List<Data> dataList = null;
		List<Data> provinces = null;
		try {
			provinces = dataservice.getData1();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		request.setAttribute("rs", dataList);
		Gson gson = new Gson();
		String json2 = gson.toJson(provinces);
		response.getWriter().write(json2);
	}

以上需要用到的js和jar:

echarts.js可以从官网下载
Google的转json插件和china.js:链接:https://pan.baidu.com/s/1ATbGjFp94DUrvXLE-E4geQ 提取码:hbsm

推荐阅读