• Java记录-SpringMVC整合Echarts画地图加散点图


    1.搭建eclipse+JDK+Maven+SpringMVC+Spring+Mybatis后台架构,详细就不过多阐述了

    2.下载百度eharts插件:http://echarts.baidu.com/download.html   下载地图JSON

    3.后台代码架构

    3.1 entity层核心关键代码

    public class LgorgInfo {
    	private String tmw;
        private String dtype;
        private String orgname;
        private String len;
    	private String organlongitude;
        private String organlatitude;
        private String origin;
        public String getOrganlongitude() {
    		return organlongitude;
    	}
    	public void setOrganlongtitude(String organlongtitude) {
    		this.organlongitude = organlongtitude;
    	}
    	public String getOrganlatitude() {
    		return organlatitude;
    	}
    	public void setOrganlatitude(String organlatitude) {
    		this.organlatitude = organlatitude;
    	}
        public String getLen() {
    		return len;
    	}
    	public void setLen(String len) {
    		this.len = len;
    	}
        public String getTmw() {
    		return tmw;
    	}
    	public void setTmw(String tmw) {
    		this.tmw = tmw;
    	}
    	public String getDtype() {
    		return dtype;
    	}
    	public void setDtype(String dtype) {
    		this.dtype = dtype;
    	}
    	public String getOrgname() {
    		return orgname;
    	}
    	public void setOrgname(String orgname) {
    		this.orgname = orgname;
    	}
    	public String getOrigin() {
    		return origin;
    	}
    	public void setOrigin(String origin) {
    		this.origin = origin;
    	}
    }
    3.2 dao层核心关键代码

    @MyBatisDao
    public interface LgorgmapDao extends CrudDao<Object>{
    	/***
    	 * 获取机构名和病例数
    	 * 获取对应的时间
    	 * 获取对应的时间长度
    	 * @param begindate
    	 * @return
    	 */
    	/***
    	 * 按月
    	 * @param begindate
    	 * @return
    	 */
    	public abstract List<LgorgInfo> getlgorgBymon(String begindate);
    	public abstract List<String> getlgorgBymondate(String begindate);
    	/***
    	 * 按周
    	 * @param begindate
    	 * @return
    	 */
    	public abstract List<LgorgInfo> getlgorgByweek(String begindate);
    	public abstract List<String> getlgorgByweekdate(String begindate);
        /***
         * 最近一周
         * @param begindate
         * @return
         */
    	public abstract List<LgorgInfo> getlgorgBydayw(String begindate);
    	public abstract List<String> getlgorgBydaywdate(String begindate);
    	/***
    	 * 最近一月
    	 * @param begindate
    	 * @return
    	 */
    	public abstract List<LgorgInfo> getlgorgBydaym(String begindate);
    	public abstract List<String> getlgorgBydaymdate(String begindate);
    }
    
    3.3 service层核心关键代码
    @Service
    @Transactional(readOnly = true)
    public class LgorgmapService extends BaseService {
    
    	@Autowired
    	private LgorgmapDao LgorgmapDao;
    	@Autowired
    	private GetMaxDateDao maxDateDao;
    
    	/***
    	 * 获取流感机构信息(机构名、病例数据、时间)
    	 * 
    	 * @param begindate
    	 * @param datetype
    	 * @return
    	 */
    	public Map<String, Object> getlgorgmap(String begindate, String datetype) {
    		Map<String, Object> map = new HashMap<String, Object>();
    		List<HashMap<String, Object>> maxdate = new ArrayList<HashMap<String, Object>>();
    		List<String> mList = new ArrayList<String>();
    		maxdate = maxDateDao.getlgmaxdate();// 获取手足口数据的最大时间
    		if (maxdate != null && maxdate.size() > 0) {
    			for (HashMap<String, Object> hashMap : maxdate) {
    				String dname = hashMap.get("VDATE") + "";
    				mList.add(dname);
    			}
    		}
    		begindate = mList.get(0).toString();
    		List<LgorgInfo> list = new ArrayList<LgorgInfo>();
    		List<String> timeLineData = new ArrayList<String>();
    		if (datetype.indexOf("最近一周") != -1) {
    			timeLineData = this.LgorgmapDao.getlgorgBydaywdate(begindate);
    			list = this.LgorgmapDao.getlgorgBydayw(begindate);
    		} else if (datetype.indexOf("最近一月") != -1) {
    			timeLineData = this.LgorgmapDao.getlgorgBydaymdate(begindate);
    			list = this.LgorgmapDao.getlgorgBydaym(begindate);
    		} else if (datetype.indexOf("按周进行") != -1) {
    			timeLineData = this.LgorgmapDao.getlgorgByweekdate(begindate);
    			list = this.LgorgmapDao.getlgorgByweek(begindate);
    		} else if (datetype.indexOf("按月进行") != -1) {
    			timeLineData = this.LgorgmapDao.getlgorgBymondate(begindate);
    			list = this.LgorgmapDao.getlgorgBymon(begindate);
    		}
    		map = handleInfo(timeLineData, list, map);
    		return map;
    	}
        /***
         * 处理数据输出对应的格式
         * @param timeLineData
         * @param list
         * @param map
         * @return
         */
    	private Map<String, Object> handleInfo(List<String> timeLineData, List<LgorgInfo> list, Map<String, Object> map) {
    		List<Object> optionsList = new ArrayList<Object>();
    		for (int i = 0; i < timeLineData.size(); i++) {
    			String vdate = (String) timeLineData.get(i);
    			Map<String, Object> seriesMap = new HashMap<String, Object>();
    			List<Object> dataList = new ArrayList<Object>();
    			Map<String, Object> dataMap = new HashMap<String, Object>();
    			List<Object> dataAllList = new ArrayList<Object>();
    			for (int j = 0; j < list.size(); j++) {
    				Map<String, Object> seriesDataMap = new HashMap<String, Object>();
    				List<String> valueList = new ArrayList<String>();
    				if (vdate.equals(((LgorgInfo) list.get(j)).getTmw())) {
    					valueList.add(((LgorgInfo) list.get(j)).getOrganlongitude());
    					valueList.add(((LgorgInfo) list.get(j)).getOrganlatitude());
    					valueList.add(((LgorgInfo) list.get(j)).getOrigin());
    					seriesDataMap.put("name", ((LgorgInfo) list.get(j)).getOrgname());
    					seriesDataMap.put("value", valueList);
    					dataList.add(seriesDataMap);
    					if (list.size() > 1) {
    						list.remove(j);
    						j -= 1;
    					}
    				}
    			}
    			dataMap.put("data", dataList);
    			dataAllList.add(dataMap);
    			seriesMap.put("series", dataAllList);
    			optionsList.add(seriesMap);
    		}
    		map.put("optionsList", optionsList);
    		map.put("timeLineData", timeLineData);
    		//System.out.println(map);
    		return map;
    	}
    }
    
    3.4 controller层核心关键代码
    @Controller
    @RequestMapping("/${adminPath}/lxb/Lgorgmap")
    public class LgorgmapController extends BaseController{
    	@Autowired
    	private LgorgmapService lgorgmapService;
    	
    	//获取当前view页面
    	@RequestMapping("")
    	public String goLgorg(Model model){
    		return "modules/lxb/Lgorgmap";
    	}
        //获取流感机构地图数据
    	@RequestMapping(value="/getlgorgmap",method = RequestMethod.GET)
    	public @ResponseBody Map<String,Object> getlgseason(HttpServletRequest request,HttpServletResponse response) throws IOException{  
    		//String BeginDate=new String(request.getParameter("BeginDate").getBytes("ISO-8859-1"),"UTF-8");
    	    String BeginDate="";
    		String DateType=new String(request.getParameter("DateType").getBytes("ISO-8859-1"),"UTF-8");
    		return lgorgmapService.getlgorgmap(BeginDate,DateType);
    	}
    }

    3.5 Mybatis SQL.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.sz.lxb.modules.lxb.dao.LgorgmapDao">
        <!--取最近一周的信息(机构、病例、日期、日期长度)  -->
    	<select id="getlgorgBydayw" resultType="com.sz.lxb.modules.lxb.entity.LgorgInfo">           
        select 
        t.tmw as tmw,
        t.org_name as orgname,
        t.origin as origin, 
        t.organ_longitude as organlongitude,
        t.organ_latitude as organlatitude
        from tab_org_lg t 
        where  TO_DATE(T.TMW,'yyyy-MM-dd')>=TO_date(to_char(TO_DATE(#{0},'yyyy-MM-dd')-7,'yyyy-MM-dd'),'yyyy-MM-dd') 
        AND TO_DATE(T.TMW,'yyyy-MM-dd')<=TO_date(#{0},'yyyy-MM-dd') 
        and trim(t.dtype)='天' ORDER BY t.tmw asc
    	</select>
    	<select id="getlgorgBydaywdate" resultType="String">           
        select DISTINCT t.tmw as tmw from tab_org_lg t 
        where  to_date(t.tmw,'yyyy-MM-dd')>=to_date(to_char(to_date(#{0},'yyyy-MM-dd')-7,'yyyy-MM-dd'),'yyyy-MM-dd') 
        AND to_date(t.tmw,'yyyy-MM-dd')<=to_date(#{0},'yyyy-MM-dd')
        and trim(t.dtype)='天' ORDER BY t.tmw ASC 
    	</select>
    
    	<!--取最近一月的信息(机构、病例、日期、日期长度)  -->
    	<select id="getlgorgBydaym" resultType="com.sz.lxb.modules.lxb.entity.LgorgInfo">           
        select 
        t.tmw as tmw,
        t.org_name as orgname,
        t.origin as origin, 
        t.organ_longitude as organlongitude,
        t.organ_latitude as organlatitude
        from tab_org_lg t 
        where  TO_DATE(T.TMW,'yyyy-MM-dd')>=TO_date(to_char(TO_DATE(#{0},'yyyy-MM-dd')-30,'yyyy-MM-dd'),'yyyy-MM-dd') 
        AND TO_DATE(T.TMW,'yyyy-MM-dd')<=TO_date(#{0},'yyyy-MM-dd') 
        and trim(t.dtype)='天' ORDER BY t.tmw asc
    	</select>
    	<select id="getlgorgBydaymdate" resultType="String">           
        select DISTINCT t.tmw as tmw from tab_org_lg t 
        where  to_date(t.tmw,'yyyy-MM-dd')>=to_date(to_char(to_date(#{0},'yyyy-MM-dd')-30,'yyyy-MM-dd'),'yyyy-MM-dd') 
        AND to_date(t.tmw,'yyyy-MM-dd')<=to_date(#{0},'yyyy-MM-dd')
        and trim(t.dtype)='天' ORDER BY t.tmw ASC 
    	</select>
    
    	<!--取按月的信息(机构、病例、日期、日期长度)  -->
    	<select id="getlgorgBymon" resultType="com.sz.lxb.modules.lxb.entity.LgorgInfo">           
        select 
        t.tmw as tmw,
        t.org_name as orgname,
        t.origin as origin, 
        t.organ_longitude as organlongitude,
        t.organ_latitude as organlatitude 
        from tab_org_lg t 
        where to_char(to_date(t.tmw,'yyyy-MM'),'yyyy-MM')>=to_char(to_date(#{0},'yyyy-MM-dd')-365,'yyyy-MM')
        AND to_char(to_date(t.tmw,'yyyy-MM'),'yyyy-MM')<=to_char(to_date(#{0},'yyyy-MM-dd'),'yyyy-MM')
        and trim(t.dtype)='月' ORDER BY t.tmw asc
    	</select>
    	<select id="getlgorgBymondate" resultType="String">           
        select DISTINCT t.tmw as tmw from tab_org_lg t 
        where to_char(to_date(t.tmw,'yyyy-MM'),'yyyy-MM')>=to_char(to_date(#{0},'yyyy-MM-dd')-365,'yyyy-MM')
        AND to_char(to_date(t.tmw,'yyyy-MM'),'yyyy-MM')<=to_char(to_date(#{0},'yyyy-MM-dd'),'yyyy-MM')
        and trim(t.dtype)='月' ORDER BY t.tmw asc
    	</select>
    
    	<!--取按周的信息(机构、病例、日期、日期长度)  -->
    	<select id="getlgorgByweek" resultType="com.sz.lxb.modules.lxb.entity.LgorgInfo">           
        select 
        t.tmw as tmw,
        t.org_name as orgname,
        t.origin as origin, 
        t.organ_longitude as organlongitude,
        t.organ_latitude as organlatitude 
        from tab_org_lg t 
        where t.tmw>=to_char(to_date(#{0},'yyyy-MM-dd')-182,'yyyy-IW')
        AND t.tmw<=to_char(to_date(#{0},'yyyy-MM-dd'),'yyyy-IW')
        and trim(t.dtype)='周' ORDER BY t.tmw asc
    	</select>
    	<select id="getlgorgByweekdate" resultType="String">           
        select DISTINCT t.tmw as tmw from tab_org_lg t 
        where t.tmw>=to_char(to_date(#{0},'yyyy-MM-dd')-182,'yyyy-IW')
        AND t.tmw<=to_char(to_date(#{0},'yyyy-MM-dd'),'yyyy-IW')
        and trim(t.dtype)='周' ORDER BY t.tmw asc
    	</select>
    </mapper>


    4.前台关键代码

    <%@ page contentType="text/html;charset=UTF-8" %>
    <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>流感大数据时空机构地图分布</title>
    <script type="text/javascript" src="${ctxStatic}/lxb/baseinfo/js/jquery.min.js"></script>
     <link rel="stylesheet" href="${ctxStatic}/lxb/lgmap/js/org.css" type="text/css" />   
     <script type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/jquery-1.4.2.min.js"></script>
     <script language="javascript" type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/My97DatePicker/WdatePicker.js"></script> 
     <script type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/echarts.min.js" charset="utf-8"/>
    <script src="${ctxStatic}/lxb/lgmap/js/sz.js"></script>
    <script src="${ctxStatic}/lxb/lgmap/js/infographic.js"></script>
    </head>
    <body>
    <div id='all'>
    <div id="container">
    <div class="clear-fix" id="wrapper">
    <div class="top_p" id="select">
    	<span class="tips_map">  
    	<!--<input id="sole-input" class="text"  type="text" name="word" 
    	autocomplete="off" maxlength="25" placeholder="2015-01-01" 
    	value="2015-01-01" onClick="WdatePicker()">-->
    	</span>
    	<select id="date" class="ui-select">
    		<option>选择周期</option>
    		<option>按月进行</option>
    		<option>按周进行</option>
    		<option>最近一周</option>
    		<option>最近一月</option>
    	</select> 
    </div>
    <div id="map"></div>
    </div>
    </div>
    	<script type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/plug-in/jQuery_select/js/jquery-1.11.0.min.js"></script>
        <script type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/plug-in/jQuery_select/js/jquery-ui.js"></script>
        <script type="text/javascript" src="${ctxStatic}/lxb/lgmap/js/plug-in/jQuery_select/js/select-widget-min.js"></script>
        <script type="text/javascript">
    	$(document).ready(function(){		
    		$(".ui-select").selectWidget({
    			change: function (changes) {
    				//var time = document.getElementById("sole-input").value; 
    				var time='0000-00-00';
    				dataFunc(changes,time);
    			},
    			effect       : "slide",
    			keyControl   : true,
    			scrollHeight : 250
    		});
    //////////////////////////////////定义一些全局变量/////////////////////////////////////////////////////////////////////////
    		//定义各个曲线数据变量   
    		var data_date=[],data_optionsList=[];
    		var d1=["2015-01-01"],d2=[];
    		loadmap(d1,d2,10,0);
    	///////////////////////////////初始化地图//////////////////////////////////////////////////
    	function loadmap(date1,optionsList,maxnum,mthod){
    		$.get('${ctxStatic}/lxb/lgmap/data/sz.json', function (szjson) {  
    	        echarts.registerMap('深圳', szjson);  
    	        var chart = echarts.init(document.getElementById('map'),'infographic');	
    	        optionMap={
    				baseOption:{
    					timeline:{
    			show:true,
    	                type:'slider',
    	                axisType:'category',
    			notMerge:false,
    			realtime:true,
    	        data:date1,
    	        label:  {
    	    show: true,
    	    interval: 'auto',
    	    rotate: 0,
    	     formatter:function(s) {
    	                    if(mthod==2)
    	                    {
    	                    return (new String(s))+'周';
    	                    }
    						else if(mthod==3){
    						return ((new Date(s)).getFullYear())+'-'+((new Date(s)).getMonth()+1)+'月';
    						}
    	                    else{
    	                    return ((new Date(s)).getFullYear()).toString()+'-'+((new Date(s)).getMonth()+1).toString()+'-'+((new Date(s)).getDate()).toString();
    	                    }
    	                },
    	    textStyle: {
    	        color:'white'
    	    }
    	}, 
    	controlPosition:'left',
    	checkpointStyle:{
    	    symbol : 'diamond',
    		symbolSize:16,
    	    color : 'yellow',
    	    borderColor : 'yellow',
    	    borderWidth : '1',
    	    label: {
    	        show: true,
    	        textStyle: {
    	            color: '#fff'
    	        }
    	    }
    	}, 
    	lineStyle:{
    	    color: '#666',
    	     1,
    	    type: 'dashed'
    	},		
    			symbol : 'emptyDiamond',
    			symbolSize:20,
    			controlStyle:{
    	    itemSize: 15,
    	    itemGap: 5, 		
    			},
    			tooltip: {
    	            trigger: 'item',
    				 formatter: function (params) {
    	                                var i=0;
    	                var value = (params.value + '').split('.');
    	                value = value[0].replace(/(d{1,3})(?=(?:d{3})+(?!d))/g, '$1,');
    	                                return '时间:'+params.name;
    	            },
    				show:true
    	        },
    	        autoPlay : true,
    	        playInterval : 1000
    	    },
    		backgroundColor: '#404a59',
    	            title: {  
    	                text:'深圳市医疗机构流感时空分布', 
    	                //subtext:sub,					
    	                x:'center',
    					textStyle: {
    	                        fontWeight: '800',
    	                        color: '#fff',
    							fontSize: '32'
    	                    },
    						subtextStyle: {
    	                        fontWeight: '800',
    	                        color: '#fff',
    							fontSize: '24'
    	                    }
    	            },
    			tooltip: {
    	            trigger: 'item',
    	            showDelay: 0,
    	            transitionDuration: 0.2,
    	             formatter: function (params) {
    	            return '流感病例'+'</br>'+params.name + ' : ' + params.value[2];
    	        }
    	        },
    				legend: {
    				orient: 'horizontal',
    				x:'370px',
    				y:'80px',
    				textStyle: {
    	                        fontWeight: '300',
    	                        color: '#1f74f2',
    							fontSize: '16'
    	                    },
    				data:['lg']
    			  },
    	         dataRange:{ 			 
    					x: 'left',
    	                y: 'bottom',
    						textStyle: {
    	                        color: '#fff',
    	                    },
    	               splitList: [
    				   {start:maxnum[16],label:'红色预警'},
    				   {start:maxnum[14], end:maxnum[15],label:'橙色预警2级'},
    				   {start:maxnum[12], end:maxnum[13],label:'橙色预警1级'},
    	               {start:maxnum[10], end:maxnum[11],label:'黄色预警2级'},
    	               {start:maxnum[8], end:maxnum[9],label:'黄色预警1级'},
    	               {start:maxnum[6], end:maxnum[7],label:'严重'},
    	               {start:maxnum[4], end:maxnum[5],label:'一般严重'},
    	               {start:maxnum[2], end:maxnum[3],label:'一般影响'},
    	               {start:maxnum[0], end:maxnum[1],label:'正常范围'}
    	               ],
    				   color:['red','yellow','green']
    	            },    
    		  geo: {
    	        map: '深圳',
    	        label: {
    	            emphasis: {
    	                show: true,
    					textStyle: {
    							fontSize: '12',
    							color:'#fff'
    				}
    	            }
    	        },
    			roam: true,
    	        itemStyle: {
    	            normal: {
    	                areaColor: '#323c48',
    	                borderColor: '#111'
    	            },
    	            emphasis: {
    	                areaColor: '#2a333d'
    	            }
    	        }
    	    },series:[  
    	                {  
    	                     name: '流感病例',
    	                     type: 'effectScatter',
    	                     coordinateSystem: 'geo',  
    	                    mapLocation:{  
    	                        y:60  
    	                    },
    	                    symbolSize: 12,
    	            label: {
    	                normal: {
    	                    show: false
    	                },
    	                emphasis: {
    	                    show: false
    	                }
    	            },
    				showEffectOn: 'render',
    	            rippleEffect: {
    	                brushType: 'stroke'
    	            },
    				large:true,
    				largeThreshold:2000,
    	            hoverAnimation: true,
    	            itemStyle: {
    	                normal: {
    	                    color: '#f4e925',
    	                    shadowBlur: 10,
    	                    shadowColor: '#333'
    	                }
    	            },
    	            zlevel: 1
    					}]
    				},
    				options:optionsList
    			};
    			chart.setOption(optionMap,true)
    	});    
    	}
    	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    	function dataFunc(str1,str2)
    	{
    		var strDate=str1;//获取选择的时间方式
    	////////////////////////////////////////对传入的日期进行处理///////////////////////////////////////////////////////////////////////////
    	    var datestr = str2;//获取选择的时间}
    		var base = new Date(Date.parse(datestr.replace(/-/g,"/")));   
    		var dd = new Date(base);
    	///////////////////////////////////////加载从mysql传出的json数据///////////////////////////////////////////////////////////////////////////////
    	allData();
    	function allData(){
    		//对传入的日期进行处理//////////////////////
    		var year = (dd.getFullYear()).toString();
    		var month =(dd.getMonth() + 1).toString();
    		var day = (dd.getDate()).toString();
    		if (month.length == 1) {
    			month = "0" + month;
    		}
    		if (day.length == 1) {
    			day = "0" + day;
    		}
    		var dateTime = year + "-" + month+"-" +day;
    		$.ajax({
        		url:"${ctx}/lxb/Lgorgmap/getlgorgmap",
        		data:{
        	"BeginDate":dateTime,
        	"DateType":strDate
        	}, 
        			dataType:"json",
        		type:"GET",
        		success:function(map){
    		    data_date=map.timeLineData;
    		    data_optionsList=map.optionsList; 
                	if(strDate=='按周进行'){
    	var maxnum=[0,50,51,100,101,500,501,1000,1001,2000,2001,5000,5001,8000,8001,10000,10001];
    	loadmap(data_date,data_optionsList,maxnum,2);
    	}
    	else if(strDate=='按月进行'){
    	var maxnum=[0,300,301,600,601,1000,1001,2000,2001,5000,5001,10000,10001,20000,20001,25000,25001];
    	loadmap(data_date,data_optionsList,maxnum,3);	
    	}
    	else{
    		var maxnum=[0,50,51,100,101,200,201,500,501,1000,1001,1500,1501,2000,2001,2500,3000];
    		loadmap(data_date,data_optionsList,maxnum,0);
    	}
    				},error:function(){
        			alert("获取数据失败!");
        		}
        	});		
    	}
    	}
    	});		
        </script>
    </div>
    </body>
    </html>




  • 相关阅读:
    js获取前一页面连接的参数值
    window.onload()函数和jQuery中的document.ready()有什么区别
    jquery中$.get()提交和$.post()提交有区别吗?
    JQuery有几种选择器?
    jQuery 库中的 $() 是什么?
    JavaScript内置可用类型
    .JS 中 == 和 === 区别是什么
    undefined,null 和 undeclared 有什么区别
    JS中如何将页面重定向到另一个页面
    数据库设计中,一对多如何处理?
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7684578.html
Copyright © 2020-2023  润新知