JavaEE--使用百度echarts实现地图报表
参考:http://echarts.baidu.com/option.html#title
https://www.cnblogs.com/zhangyong123/p/4974554.html
https://www.cnblogs.com/moonache/p/4661058.html
http://echarts.baidu.com/examples/editor.html?c=effectScatter-map
写了个简单的servlet来显示
下面是代码
city.txt(只是制造数据测试用)
1 "北京":[116.46,39.92], 2 "上海":[121.48,31.22], 3 "天津":[117.2,39.13], 4 "重庆":[106.54,29.59], 5 "河北":[114.48,38.03], 6 "山西":[112.53,37.87], 7 "辽宁":[123.38,41.8], 8 "吉林":[125.35,43.88], 9 "黑龙江":[126.63,45.75], 10 "浙江":[120.19,30.26], 11 "福建":[119.3,26.08], 12 "山东":[117,36.65], 13 "河南":[113.65,34.76], 14 "湖北":[114.31,30.52], 15 "湖南":[113,28.21], 16 "广东":[113.23,23.16], 17 "海南":[110.35,20.02], 18 "四川":[104.06,30.67], 19 "贵州":[106.71,26.57], 20 "云南":[102.73,25.04], 21 "江西":[115.89,28.68], 22 "陕西":[108.95,34.27], 23 "青海":[101.74,36.56], 24 "甘肃":[103.73,36.03], 25 "广西":[108.33,22.84], 26 "新疆":[87.68,43.77], 27 "内蒙古":[111.65,40.82], 28 "西藏":[91.11,29.97], 29 "宁夏":[106.27,38.47], 30 "台湾":[121.5,25.14], 31 "香港":[114.1,22.2], 32 "澳门":[113.33,22.13], 33 "安徽":[117.27,31.86], 34 "江苏":[118.78,32.04]
Demo.java(随机制造数据)
1 package test; 2 3 import java.io.BufferedReader; 4 import java.io.FileReader; 5 import java.io.IOException; 6 import java.util.Random; 7 8 public class Demo { 9 10 public static void main(String[] args) throws IOException { 11 System.out.println(new Demo().invoke()); 12 } 13 14 public String invoke() throws IOException { 15 BufferedReader br = new BufferedReader(new FileReader("E:/gitProject/Test/city.txt")); 16 String msg = ""; 17 String result = ""; 18 // {name: "", value: }, 19 while ((msg = br.readLine()) != null) { 20 // System.out.println(msg); 21 result += "{name: " + msg.split(":")[0] + ", value: " + (new Random().nextInt(100) + 1) + "},\n"; 22 } 23 result = result.trim(); 24 System.out.println(result); 25 br.close(); 26 return result.substring(0, result.length() - 1); 27 } 28 29 }
servlet
1 package test; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.ServletRequest; 8 import javax.servlet.ServletResponse; 9 import javax.servlet.http.HttpServlet; 10 11 @SuppressWarnings("serial") 12 public class DataServlet extends HttpServlet { 13 14 @Override 15 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 16 // TODO Auto-generated method stub 17 System.out.println("data servlet"); 18 res.setContentType("text/plain; charset=utf-8"); 19 try (PrintWriter out = res.getWriter();) { 20 // String json = "{\"name\" : \"tom\"}"; 21 String result = "[ " + new Demo().invoke() + " ]"; 22 // result = "{\"data\" : ' " + result + "\"}"; 23 out.println(result); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 28 } 29 30 }
用于显示的html
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <!-- 引入 ECharts 文件 --> 6 <script src="echarts.js" charset="utf-8"></script> 7 <script src="china.js" charset="utf-8"></script> 8 <script src="jquery-3.3.1.min.js" charset="utf-8"></script> 9 <style type="text/css"> 10 html, body { 11 padding: 0; 12 margin: 0; 13 height: 100%; 14 overflow: hidden; 15 } 16 17 #main { 18 height: 100%; 19 z-index: 0; 20 background: #00FF00; 21 } 22 </style> 23 <script type="text/javascript"> 24 //声明一个函数(整个文档都可以使用) 25 var geoCoordMap = { 26 "北京" : [ 116.46, 39.92 ], 27 "上海" : [ 121.48, 31.22 ], 28 "天津" : [ 117.2, 39.13 ], 29 "重庆" : [ 106.54, 29.59 ], 30 "河北" : [ 114.48, 38.03 ], 31 "山西" : [ 112.53, 37.87 ], 32 "辽宁" : [ 123.38, 41.8 ], 33 "吉林" : [ 125.35, 43.88 ], 34 "黑龙江" : [ 126.63, 45.75 ], 35 "浙江" : [ 120.19, 30.26 ], 36 "福建" : [ 119.3, 26.08 ], 37 "山东" : [ 117, 36.65 ], 38 "河南" : [ 113.65, 34.76 ], 39 "湖北" : [ 114.31, 30.52 ], 40 "湖南" : [ 113, 28.21 ], 41 "广东" : [ 113.23, 23.16 ], 42 "海南" : [ 110.35, 20.02 ], 43 "四川" : [ 104.06, 30.67 ], 44 "贵州" : [ 106.71, 26.57 ], 45 "云南" : [ 102.73, 25.04 ], 46 "江西" : [ 115.89, 28.68 ], 47 "陕西" : [ 108.95, 34.27 ], 48 "青海" : [ 101.74, 36.56 ], 49 "甘肃" : [ 103.73, 36.03 ], 50 "广西" : [ 108.33, 22.84 ], 51 "新疆" : [ 87.68, 43.77 ], 52 "内蒙古" : [ 111.65, 40.82 ], 53 "西藏" : [ 91.11, 29.97 ], 54 "宁夏" : [ 106.27, 38.47 ], 55 "台湾" : [ 121.5, 25.14 ], 56 "香港" : [ 114.1, 22.2 ], 57 "澳门" : [ 113.33, 22.13 ], 58 "安徽" : [ 117.27, 31.86 ], 59 "江苏" : [ 118.78, 32.04 ] 60 }; 61 62 var convertData = function(data) { 63 var res = []; 64 for (var i = 0; i < data.length; i++) { 65 var geoCoord = geoCoordMap[data[i].name]; 66 console.log(geoCoord); 67 if (geoCoord) { 68 res.push({ 69 name : data[i].name, 70 value : geoCoord.concat(data[i].value) 71 }); 72 } 73 } 74 return res; 75 }; 76 </script> 77 <title>Insert title here</title> 78 </head> 79 <body> 80 <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --> 81 <div id="main"></div> 82 var myChart; 83 <script type="text/javascript"> 84 // 基于准备好的dom,初始化echarts实例 85 myChart = echarts.init(document.getElementById('main')); 86 87 // 指定图表的配置项和数据 88 var data = [ { 89 name : "北京", 90 value : 53 91 }, { 92 name : "上海", 93 value : 50 94 }, { 95 name : "天津", 96 value : 32 97 }, { 98 name : "重庆", 99 value : 69 100 }, { 101 name : "河北", 102 value : 94 103 }, { 104 name : "山西", 105 value : 96 106 }, { 107 name : "辽宁", 108 value : 57 109 }, { 110 name : "吉林", 111 value : 69 112 }, { 113 name : "黑龙江", 114 value : 26 115 }, { 116 name : "浙江", 117 value : 89 118 }, { 119 name : "福建", 120 value : 37 121 }, { 122 name : "山东", 123 value : 9 124 }, { 125 name : "河南", 126 value : 26 127 }, { 128 name : "湖北", 129 value : 59 130 }, { 131 name : "湖南", 132 value : 46 133 }, { 134 name : "广东", 135 value : 73 136 }, { 137 name : "海南", 138 value : 7 139 }, { 140 name : "四川", 141 value : 48 142 }, { 143 name : "贵州", 144 value : 89 145 }, { 146 name : "云南", 147 value : 73 148 }, { 149 name : "江西", 150 value : 11 151 }, { 152 name : "陕西", 153 value : 65 154 }, { 155 name : "青海", 156 value : 63 157 }, { 158 name : "甘肃", 159 value : 9 160 }, { 161 name : "广西", 162 value : 47 163 }, { 164 name : "新疆", 165 value : 76 166 }, { 167 name : "内蒙古", 168 value : 32 169 }, { 170 name : "西藏", 171 value : 93 172 }, { 173 name : "宁夏", 174 value : 83 175 }, { 176 name : "台湾", 177 value : 92 178 }, { 179 name : "香港", 180 value : 80 181 }, { 182 name : "澳门", 183 value : 6 184 }, { 185 name : "安徽", 186 value : 9 187 }, { 188 name : "江苏", 189 value : 6 190 }, ]; 191 192 193 option = { 194 backgroundColor : '#404a59', 195 title : { 196 text : '全国各省开票量', 197 subtext : '', 198 sublink : '', 199 left : 'center', 200 textStyle : { 201 color : '#fff' 202 } 203 }, 204 tooltip : { 205 trigger : 'item', 206 axisPointer : { 207 label : { 208 show : true, 209 textStyle : { 210 color : '' 211 } 212 } 213 }, 214 formatter : function(params) { 215 return '开票量<br>' + params.name + ' : ' + params.value[2]; 216 } 217 }, 218 legend : { 219 orient : 'vertical', 220 y : 'bottom', 221 x : 'right', 222 data : [ '开票量' ], 223 textStyle : { 224 color : '#fff' 225 } 226 }, 227 geo : { 228 map : 'china', 229 label : { 230 emphasis : { 231 show : false 232 } 233 }, 234 roam : true, 235 itemStyle : { 236 normal : { 237 areaColor : '#323c48', 238 borderColor : '#111' 239 }, 240 emphasis : { 241 areaColor : '#2a333d' 242 } 243 } 244 }, 245 series : [ { 246 name : '开票量', 247 type : 'effectScatter', 248 coordinateSystem : 'geo', 249 data : convertData(data.sort(function(a, b) { 250 return b.value - a.value; 251 }).slice(0, data.length)), 252 symbol : 'circle', 253 symbolSize : function(val) { 254 return val[2] / 5; 255 }, 256 showEffectOn : 'render', 257 rippleEffect : { 258 brushType : 'stroke' 259 }, 260 hoverAnimation : true, 261 label : { 262 normal : { 263 formatter : '{b}', 264 position : 'right', 265 show : true 266 } 267 }, 268 itemStyle : { 269 normal : { 270 color : '#97FFFF', 271 shadowBlur : 10, 272 shadowColor : '#97FFFF' 273 } 274 } 275 }] 276 }; 277 278 // 使用刚指定的配置项和数据显示图表。 279 myChart.setOption(option); 280 </script> 281 </body> 282 <script type="text/javascript"> 283 284 //声明一个函数(整个文档都可以使用) 285 main.onclick = function() { 286 alert('hello world'); 287 $.ajax({ 288 url : 'data', 289 type : 'GET', //GET 290 async : true, //或false,是否异步 291 data : { 292 //name:'yang',age:25 293 }, 294 timeout : 5000, //超时时间 295 dataType : 'text', //返回的数据格式:json/xml/html/script/jsonp/text 296 beforeSend : function(xhr) { 297 console.log(xhr) 298 console.log('发送前') 299 alert('before') 300 }, 301 success : function(data, textStatus, jqXHR) { 302 var option = myChart.getOption(); 303 304 var ds = eval(data); 305 306 307 option.series[0].data = convertData(ds); 308 myChart.setOption(option); 309 310 311 312 313 }, 314 error : function(xhr, textStatus) { 315 console.log('错误') 316 console.log(xhr) 317 console.log(textStatus) 318 }, 319 complete : function() { 320 console.log('结束') 321 } 322 }); 323 324 } 325 </script> 326 </html>
最终效果
这里模拟的是点击刷新,实际应用可以写个定时器