首先要导入对应的包。下钻用到各个省份的json文件等内容导入之后进行相关的操作。
首先是从数据库中读取相应的数据文件。通过list方式。只有在ser出转化为json文件。在jsp页面通过ajax来进行数据的获取。返回json对象。
获取数据库中的信息保存到list对象集合之中简单如下:
public static ArrayList<heibeicity> findDate(String Date) { // TODO Auto-generated method stub String sql = "select * from hebei_city_info where Date =\'" +Date+ "\'"; ArrayList<heibeicity> list =new ArrayList<heibeicity>(); Connection con=null; PreparedStatement psts=null; ResultSet rs=null; try { con=DBUtil.getConn(); psts=con.prepareStatement(sql); rs=psts.executeQuery();//记录返回的结果 while(rs.next()) { heibeicity user1=new heibeicity(); user1.setCity(rs.getString("City")); user1.setNew_confirmed_num(rs.getString("new_confirmed_num")); user1.setConfirmed_num(rs.getString("confirmed_num")); user1.setDead_num(rs.getString("dead_num")); user1.setZhong_num(rs.getString("zhong_num")); user1.setCured_num(rs.getString("cured_num")); user1.setDate(rs.getString("date")); list.add(user1); } DBUtil.close(rs, psts, con); return list; } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return list; }
之后将这个list转换成json类型返回ajax:
response.setContentType("text/plain; charset=UTF-8"); userdao userdao=new userdao(); ArrayList<info1> info_list=userdao.findpro(); HttpSession session = request.getSession(); session.setAttribute("info_list",info_list); Gson gson = new Gson(); String json = gson.toJson(info_list); response.getWriter().write(json);
之后就是生成整个地图进行显示各个省份的内容:
代码中的主要部分如下:
for(var i=0;i<32;i++){ var d = { }; d["name"] = data[i].Province;//.substring(0, 2); d["value"] = data[i].Confirmed_num; d["Yisi_num"] = data[i].Yisi_num; d["Cured_num"] = data[i].Cured_num; d["Dead_num"] = data[i].Dead_num; mydata.push(d); }
tooltip : { trigger: \'item\', formatter : function(params) { return params.name + \'<br/>\' + \'确诊人数 : \' + params.value + \'<br/>\' + \'死亡人数 : \' + params[\'data\'].Dead_num + \'<br/>\' + \'治愈人数 : \' + params[\'data\'].Cured_num + \'<br/>\'+ \'疑似患者人数 : \' + params[\'data\'].Yisi_num; }//数据格式化 },
第一个一定要有name\value的复制,name帮助判断是哪个省市。之后value来进行判断省份的颜色。,第一个中的例如
a={}相当于 a = new Object();
下边的tooltip是显示提示信息的;
主要的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page import="com.yiqing.users.*"%> <%@page import="java.util.ArrayList"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script> <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> <meta charset="utf-8"> <title>中国疫情图</title> <!-- 引入 echarts.js --> <script src="${pageContext.request.contextPath}/resource/echarts.js"></script> </head> <body> <!--为echarts准备一个dom容器--> <div id="myEcharts"></div> <script> window.onload=function(){ $.ajax({//()里面是JSON数据,外层要加上{}。 url:"lianxi2",//处理页面地址,表示ajax要用哪个页面处理 data:{code:"n001"},//传递到处理页面的值,也是JSON数据,要用{}。如果传2个值就在{}里面加逗号,再写另外1个值。 type:"POST",//传值方式,一般用POST方式,注意POST要大写。 dataType:"JSON",//返回值的类型。1.TEXT文本,字符串。2.JSON数据 3.XML可扩展标记语言,主要用在数据传递。 async:true, success:function(data){//表示处理成功之后做什么,后面跟一个匿名函数。回调函数,表示处理页面处理完数据以后执行这个函数。data表示处理页面返回的值,用形参接收。 var mydata = new Array(0); alert(data[0].Province+data[0].Cured_num); for(var i=0;i<32;i++){ var d = { }; d["name"] = data[i].Province;//.substring(0, 2); d["value"] = data[i].Confirmed_num; d["Yisi_num"] = data[i].Yisi_num; d["Cured_num"] = data[i].Cured_num; d["Dead_num"] = data[i].Dead_num; mydata.push(d); } //初始化echarts实例 var myChart = echarts.init(document.getElementById(\'myEcharts\')); // 指定图表的配置项和数据 var option = { tooltip : { trigger: \'item\', formatter : function(params) { return params.name + \'<br/>\' + \'确诊人数 : \' + params.value + \'<br/>\' + \'死亡人数 : \' + params[\'data\'].Dead_num + \'<br/>\' + \'治愈人数 : \' + params[\'data\'].Cured_num + \'<br/>\'+ \'疑似患者人数 : \' + params[\'data\'].Yisi_num; }//数据格式化 }, title: { text: \'中国疫情图\', left: \'center\' }, 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: 150, max: 499, label: \'确诊150-499人\', color: \'#974236\' }, { min: 50, max: 149, label: \'确诊50-149人\', color: \'#ee7263\' }, { min: 1, max: 49, label: \'确诊1-49人\', 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\', nameMap : { \'南海诸岛\' : \'南海诸岛\', \'北京\' : \'北京市\', \'天津\' : \'天津市\', \'上海\' : \'上海市\', \'重庆\' : \'重庆市\', \'河北\' : \'河北省\', \'河南\' : \'河南省\', \'云南\' : \'云南省\', \'辽宁\' : \'辽宁省\', \'黑龙江\' : \'黑龙江省\', \'湖南\' : \'湖南省\', \'安徽\' : \'安徽省\', \'山东\' : \'山东省\', \'新疆\' : \'新疆维吾尔自治区\', \'江苏\' : \'江苏省\', \'浙江\' : \'浙江省\', \'江西\' : \'江西省\', \'湖北\' : \'湖北省\', \'广西\' : \'广西壮族自治区\', \'甘肃\' : \'甘肃省\', \'山西\' : \'山西省\', \'内蒙古\' : "内蒙古自治区", \'陕西\' : \'陕西省\', \'吉林\' : \'吉林省\', \'福建\' : \'福建省\', \'贵州\' : \'贵州省\', \'广东\' : \'广东省\', \'青海\' : \'青海省\', \'西藏\' : \'西藏自治区\', \'四川\' : \'四川省\', \'宁夏\' : \'宁夏回族自治区\', \'海南\' : \'海南省\', \'台湾\' : \'台湾\', \'香港\' : \'香港\', \'澳门\' : \'澳门\' }, roam: false, label: { show: true, color: \'rgb(249, 249, 249)\' }, data: mydata } ] }; //使用指定的配置项和数据显示图表 myChart.setOption(option); myChart.on(\'click\', function (params) { alert(params.name); var url = "lianxi3?city_name="+ params.name; window.location.href =url; }); }, error:function(){//处理页面出错以后执行的函数。 } }); } </script> </body> </html>
之后就是对下钻的操作了。添加province的对应的json文件。之后代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="${pageContext.request.contextPath }/css/bootstrap.min.css" rel="stylesheet"> <script type="text/javascript" src="${pageContext.request.contextPath }/js/echarts.min(1).js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/js/china.js"></script> <script src="${pageContext.request.contextPath }/js/china.js"></script> <script src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script> <script src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script> <title>Insert title here</title> </head> <body> <div id="ditu2" style="width: 700px;height: 700px;margin: 0 auto;"></div> </body> <script type="text/javascript"> $.ajax({ url:"lianxi33", async:true, type:"POST", dataType:"json", data:{"City":"${city_name}", }, success:function(data){ alert(data[1].City+data[1].Dead_num); alert(data.length); var mydata2= new Array(0); for(var i=1;i<data.length;i++){ var d2 = {}; d2["name"] = data[i].City+\'市\'; d2["value"] = data[i].Confirmed_num; d2["Dead_num"] = data[i].Dead_num; mydata2.push(d2); } var chart = echarts.init(document.getElementById("ditu2")); $.getJSON(\'json/province/${city_name}.json\', function(data) { echarts.registerMap(\'${city_name}\', data); chart.setOption(option = { tooltip: { trigger: \'item\', formatter: function(params) { return params.name + \'<br/>\' + \'确诊人数 : \' + params.value + \'<br/>\' + \'死亡人数 : \' + params[\'data\'].Dead_num; }//数据格式化 * }, //左侧小导航图标 visualMap: { show : true, x: \'left\', y: \'center\', splitList: [ {start: 500, end:100000},{start: 400, end: 500}, {start: 300, end: 400},{start: 200, end: 300}, {start: 100, end: 200},{start: 0, end: 100}, ], color: [\'#5475f5\', \'#9feaa5\', \'#85daef\',\'#74e2ca\', \'#e6ac53\', \'#9fb5ea\'] }, series : { type : \'map\', map : \'${city_name}\', roam: true, layoutCenter : [ \'50%\', \'50%\' ], layoutSize : \'100%\', label : { normal : { show : true, textStyle : { color : \'#fff\' } }, emphasis : { show : false, textStyle : { color : \'#fff\' } } }, itemStyle : { normal : { areaColor : \'rgba(24,65,91,0.3)\', borderColor : \'#9DDCEB\', borderWidth : 3, shadowColor : \'#9DDCEB\', shadowBlur : 20 }, emphasis : { areaColor : \'rgba(24,65,91,0.3)\' } }, data:mydata2 } }) }); }, error:function(){ alert("请求失败"); }, }); </script> </html>
点击湖北时,得到的界面如下: