1. 程式人生 > >echarts地圖展現某個地區的數量

echarts地圖展現某個地區的數量

正好最近專案做了個這樣的操作,先來一幅圖



我這裡的需求就是有個專案表,新增專案時會選擇地點,查詢地點名稱和對應有幾個專案值存到集合裡,傳到echarts自動繪製如上圖

List<Map> maps = new ArrayList<Map>();
hqlTask = "from TblTaskBasicInformation "//使用hql查詢查詢表  表裡有省的欄位
List<TblTaskBasicInformation> informations = tblTaskBasicInformationService
						.findByHql(hqlTask);
for (TblTaskBasicInformation information : informations) {
if (information.getXmqtcddwCompanyProvince() != null) {
	// 查詢省   Tblregion是表名,儲存省市縣的欄位,在此就不列出各個欄位了,因為後臺的資料親們測試時可以隨便寫自己想要的欄位和資料,我的程式碼僅供參考
	String Sqldq = "select * from Tblregion where id="+ information.getXmqtcddwCompanyProvince();
	List<Object[]> objs = db.getData(Sqldq);//jdbc連線並查詢方式
	Object[] obj = objs.get(0);
	// 查詢顯示圖表的資料
	maps = selectDate(obj, maps);
   }
}
        JSONArray array = new JSONArray();	
        array = array.fromObject(maps);
	setAjaxData(array.toString());//傳到前臺,這是我們框架封裝好的,前面用的是ajax,所以親們可以自己自主選則怎麼把資料傳到前面

開始新增資料

public List<Map> selectDate(Object[] obj, List<Map> maps) {
		Map hashMap = new HashMap();
		// echarts 的js地圖已經編譯好了地區名稱,看地圖就知道、大多都是兩個字、除了黑龍江和內蒙古,我們資料庫儲存的地名不相同,所以要擷取
		String areaStr = "";
		if (obj[2].toString().equals("內蒙古自治區")
				|| obj[2].toString().equals("黑龍江省")) {
			areaStr = obj[2].toString().substring(0, 3);//地圖裡黑龍江和內蒙古才三個字,所以擷取剩下三個
		} else {
			areaStr = obj[2].toString().substring(0, 2);
		}
		if (maps.size() > 0) {
			boolean iscz = true;
			for (int i = 0; i < maps.size(); i++) {
				// 地區去重複
				if (maps.get(i).get("name").equals(areaStr)) {
					// 轉換int加專案數  進入此判斷就代表著該地區存在重複
					String js = maps.get(i).get("value").toString();//就獲取之前地區的value值
					hashMap.put("name", maps.get(i).get("name"));//想要覆蓋之前一樣的地區名和value值
					hashMap.put("value", Integer.parseInt(js) + 1);//進行專案加1操作
					// 先刪除   重複的地區名稱
					maps.remove(maps.get(i));
					iscz = false;//把變數變成false好進下面的else裡面
				}
			}
			if (iscz) {
				// 沒有重複加上地區
				hashMap.put("value", 1);
				hashMap.put("name", areaStr);
				maps.add(hashMap);
			} else {
				maps.add(hashMap);//加覆蓋完畢的一個集合
			}
		} else {
			hashMap.put("value", 1);
			hashMap.put("name", areaStr);
			maps.add(hashMap);
		}
		return maps;
	}

用jdbc查詢資料

	public static List<Object[]> getData(String sql) throws SQLException {
		Statement st = null;
		Connection con = null;
		List<Object[]> objList = new ArrayList<Object[]>();
		try {
			DBConnectionManager db = new DBConnectionManager();
			con = db.getConnection();
			st = con.createStatement();
			ResultSet resultSet = st.executeQuery(sql);

			while (resultSet.next()) {
				ResultSetMetaData rsmd = resultSet.getMetaData();
				int columnCount = rsmd.getColumnCount();
				Object[] obj = new Object[columnCount];
				for (int i = 0; i < columnCount; i++) {
					if (resultSet.getString(i + 1) != null
							&& !resultSet.getString(i + 1).equals("")) {
						obj[i] = resultSet.getString(i + 1);
					}
				}
				objList.add(obj);
			}
		} catch (Exception e) {
			st.close();
			con.close();
			e.printStackTrace();
		} finally {
			st.close();
			con.close();
		}
		return objList;
	}
	

html程式碼貼上來

<div id="main" style="width: 900px;height:400px;"></div>


前臺js需要有echarts外掛哦

我用ajax進入後臺,資料再傳回來

	$.ajax({
					url : "spatialAnalysis_kjfx.action",
					type : "post",
					dataType : "JSON",
					success : function(jsondata) {
						//假設第一個值最大,之後迴圈對比哪個數最大就賦值哪個
						max = jsondata[0].value;
						var nameData;
						var subtextData;
						var titleBT;
						//比較大小
						for ( var i = 0; i < jsondata.length; i++) {
							//console.log(jsondata[i])
							if (jsondata[i].value > max) {
								max = jsondata[i].value;
							}
						}
						/*if (tjx == "1") {
							titleBT = "國家重點研發計劃專案牽頭主持單位全國分佈圖";
							nameData = "專案主持單位分佈";
							subtextData = "單位(個數)";
						}
						if (tjx == "2") {
							titleBT = "國家重點研發計劃專案承擔單位全國分佈圖";
							nameData = "專案承擔單位分佈";
							subtextData = "單位(個數)";
						}
						if (tjx == "3") {
							titleBT = "國家重點研發計劃專案立項經費分佈圖";
							nameData = "專案立項經費分佈";
							subtextData = "單位(萬元)";
						}
						if (tjx == "4") {
							titleBT = "國家重點研發計劃單位註冊分佈圖";
							nameData = "單位註冊分佈";
							subtextData = "單位(個數)";
						}*/
						if(max==0){
							max=1;
						}
						$("#title").text(titleBT);
						//頁面顯示圖表
						//$(".tjfx-map").show();
						$.get('js/echarts/china.json', function(yCjson) {
							echarts.registerMap('china', yCjson);
							// 基於準備好的dom,初始化echarts例項
							var myChart = echarts.init(document
									.getElementById('main'));
							option = {
								title : {
									text : '',
									subtext : subtextData,
									left : 'center'
								},
								tooltip : {
									trigger : 'item'
								},
								legend : {
									orient : 'vertical',
									left : 'left',
									data : [ nameData ]
								},
								visualMap : {
									min : 0,
									max : max,
									left : 'left',
									top : 'bottom',
									text : [ '高', '低' ], // 文字,預設為數值文字
									calculable : true
								},
								toolbox : {
									show : false,
									orient : 'vertical',
									left : 'right',
									top : 'center',
									feature : {
										dataView : {
											readOnly : false
										},
										restore : {},
										saveAsImage : {}
									}
								},
								series : [ {
									name : nameData,
									type : 'map',
									mapType : 'china',
									roam : false,
									label : {
										normal : {
											show : true
										},
										emphasis : {
											show : true
										}
									},
									data : jsondata
								} ]
							};
							// 使用剛指定的配置項和資料顯示圖表。
							myChart.setOption(option);
						})
					}
				})
			})//載入頁面的括號


到這裡就圓滿結束了。其實也沒那麼難吧,只要多動腦就沒有那麼多難解決的事情啦!哈哈哈哈 大笑