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',
	    width: 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>




posted @ 2017-10-17 23:25  信方  阅读(2007)  评论(0编辑  收藏  举报