<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ include file="/WEB-INF/taglib.jsp"%> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta charset="utf-8" /> <meta name="description" content="" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <script type="text/javascript" src="${res_url}assets/js/echarts/echarts.min.js"></script> <script type="text/javascript" src="${res_url}assets/js/echarts/macarons.js"></script> <script type="text/javascript" src="${res_url}assets/js/jquery1x.js"></script> <script type="text/javascript" src="${res_url}assets/js/echarts/china.js"></script> <script type="text/javascript" src="${res_url}assets/stationCoord/stationCoord2.js"></script> </head> <body> <div style="position: absolute; top: 40%; left: 79%; z-index: 20" class="btn-group btn-group-xs"> <h4>汽车站未来2小时客流统计</h4> </div> <div id="main" style="width: 98%;position: absolute; top: 0px; left: 0px;"></div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main'),'macarons'); window.onresize = function() { $('#main').height($(document).height() - 25); myChart.resize(); } $(window).resize(); var station='太原'; var convertData = function (data,flag) { var fromCoord; var toCoord ; var fromStation; var toStation; var res = []; for (var i = 0; i < data.length; i++) { var dataItem = data[i]; if(flag===0){ fromStation=dataItem.name; fromCoord= geoCoordMap[dataItem.name]; toStation=station; toCoord = geoCoordMap[station]; }else if(flag===1){ fromStation=station; fromCoord = geoCoordMap[station]; toStation=dataItem.name; toCoord= geoCoordMap[dataItem.name]; } if (fromCoord && toCoord) { res.push({ fromName: fromStation, toName:toStation, coords: [fromCoord, toCoord], value:dataItem.value }); } } return res; }; function yData(ydata){ var yval=[]; ydata.forEach(function(val,index,ydata){ yval.push(ydata[index]["value"]); }); return yval; }; function xData(xdata){ var xval=[]; xdata.forEach(function(val,index,xdata){ xval.push(xdata[index]["name"]); }); return xval; }; var color = [ '#c0f','#030']; //var color = ['#a6c84c', '#ddb926' ]; var trainPath= 'path://M463.398584 135.620817c19.766183 0 35.81981-16.022928 35.81981-35.793204 0-19.791765-16.053628-35.82288-35.81981-35.82288-19.769252 0-35.82288 16.031115-35.82288 35.82288C427.57468 119.597889 443.629331 135.620817 463.398584 135.620817zM558.5722 135.620817c19.792788 0 35.796274-16.022928 35.796274-35.793204 0-19.791765-16.004509-35.82288-35.796274-35.82288-19.791765 0-35.845393 16.031115-35.845393 35.82288C522.725784 119.597889 538.780435 135.620817 558.5722 135.620817zM680.147116 775.382643c44.347021-7.15905 88.49245-53.423747 88.49245-109.790522L768.639566 253.480108c0-58.179051-48.957015-111.602797-115.440196-111.602797l-141.693116-0.075725-142.762471 0.075725c-66.532299 0-115.440196 53.42477-115.440196 111.602797L253.303588 665.592121c0 56.344263 44.119847 102.608959 88.493473 109.736287L208.806141 959.397656l76.704986 0 95.124498-124.040061 260.624832 0 95.151104 124.040061 76.726475 0L680.147116 775.382643zM422.638251 180.468235c0-8.000208 10.370185-14.757099 22.310122-14.757099l132.069945 0c11.917424 0 22.286586 6.756891 22.286586 14.757099l0 26.003234c0 8.022721-9.797134 14.954597-22.286586 14.954597L444.948373 221.426065c-12.485359 0-22.310122-6.930853-22.310122-14.954597L422.638251 180.468235zM315.07342 315.806619c0-30.817889 19.944238-57.739029 57.511855-57.739029l276.751115 0c37.59013 0 57.534368 26.921139 57.534368 57.739029l0 74.210166c0.273223 35.671431-25.726941 57.503669-57.534368 57.503669L372.585275 447.520453c-31.785937 0-57.81066-21.832238-57.511855-57.503669L315.07342 315.806619zM370.166179 715.224518c-27.921933 0-50.602492-22.659069-50.602492-50.602492 0-27.945469 22.681582-50.626028 50.602492-50.626028 27.966958 0 50.652634 22.680559 50.652634 50.626028C420.818813 692.565449 398.133138 715.224518 370.166179 715.224518zM600.003821 664.651702c0-27.975145 22.659069-50.633191 50.602492-50.633191 27.971052 0 50.630121 22.659069 50.630121 50.633191 0 27.937283-22.659069 50.603515-50.630121 50.603515C622.661867 715.255217 600.003821 692.565449 600.003821 664.651702z'; var series = []; option = { // backgroundColor: ' #323c48', title : { text: station+'站未来2小时到达/出发客流示意图', subtext: '数据为在'+station+'站下车/上车人数', left: 'center' }, dataZoom: { type: 'slider', // yAxisIndex: 0, start:20, end:80, filterMode: 'empty', handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', handleSize: '60%', handleStyle: { shadowBlur: 3, shadowOffsetX: 2, shadowOffsetY: 2 } }, visualMap: { type: 'continuous', min: 0, max: 2000, //text:['High','Low'], realtime: false, calculable : true, //seriesIndex:[0], color: ['orangered','yellow','lightskyblue'] }, grid: { right:'1%', top:'50%', height: '40%', width: '24%' }, xAxis : [ { type : 'category', data : [], // data:xDada(), axisTick: { alignWithLabel: true } } ], yAxis : [ { type : 'value' } ], tooltip : { show:true, trigger: 'item', formatter:'{b}' }, legend: { left: 'right', data:['到达', '出发'], selectedMode: 'single' }, geo: { map: 'china', label: { normal:{ show:true, textStyle:{ color:'#999999' } }, emphasis: { show: false } }, silent:true, roam: true, zoom:1.2, center: [112.3352,37.9413], selectedMode: false, scaleLimit:{ min:0.8, max:50 }, itemStyle: { normal: { show: false, //areaColor: '#323c48', borderColor:'rgba(100,149,237,1)', borderWidth:1, areaStyle:{ color: '#1b1b1b' } }, emphasis: { show: false, areaColor: '#323c48' } } }, series:series }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); myChart.showLoading({ text: '数据正在加载中,请稍等片刻...', zlevel: 1, effectOption: { backgroundColor: '#1b1b1b' }, effect: 'whirling' }); $.ajax({ type:"post", url:"${context_path}/sys/homePage/getStationData", success:function(dataJson){ if(dataJson){ [['到达', dataJson.arriveData],['出发',dataJson.sendData]].forEach(function (item, i) { series.push( { name: item[0], type: 'lines', symbol: ['none', 'arrow'], symbolSize: 10, tooltip:{ show:true, formatter:function(params, ticket, callback){ return params.data.fromName+'->'+params.data.toName+':'+params.data.value } }, effect: { show: true, period: 10, trailLength: 0, //symbol: 'image://./res/assets/css/images/ic_train.png', //若为图片则visualMap不能隐藏效果 symbol:trainPath, symbolSize: 20 }, lineStyle: { normal: { color: color[i], width: 2, opacity: 0.8, curveness: 0.1 } }, data: convertData(item[1],i) }, { name: item[0], type: 'effectScatter', coordinateSystem: 'geo', rippleEffect: { brushType: 'stroke', }, label: { normal: { show: true, position: 'right', formatter: '{b}' }, emphasis: { show: true } }, //symbolSize: 12, symbolSize: function (val) { return 10+val[2] / 80; }, itemStyle: { normal: { color: color[i] } }, data: item[1].map(function (dataItem) { return { name: dataItem.name+"站", value: geoCoordMap[dataItem.name].concat([dataItem.value]) }; }) }, { name: item[0], type: 'effectScatter', coordinateSystem: 'geo', rippleEffect: { brushType: 'stroke' }, label: { normal: { show: false, position: 'top', formatter: function(params, ticket, callback){ var totalValue=0; for (var i = 0; i < item[1].length; i++) { totalValue+=item[1][i].value; } return station+'站\n'+item[0]+':'+totalValue } }, emphasis: { show: true } }, symbolSize: 12, itemStyle: { normal: { color: '#df1548' } }, data: item[1].map(function (dataItem) { return { name: station+'站', value: geoCoordMap[station] }; }) },{ name:item[0], type:'bar', barWidth: '50%', data:yData(item[1]) } ); myChart.setOption({ xAxis : [{ data : xData(dataJson.arriveData), }] }); } ); myChart.setOption({ visualMap:{ //在此设置起手柄拉动效果 seriesIndex:[0,1,2,3,4,5,6,7] }, series:series }); } myChart.hideLoading(); myChart.on('legendselectchanged', function(obj) { var selected = obj.selected; var legend = obj.name; if (legend != undefined) { if (legend === '到达') { myChart.setOption({ xAxis : [{data : xData(dataJson.arriveData)}] }); } else { myChart.setOption({ xAxis : [{ data : xData(dataJson.sendData) }] }); } } }); } }); </script> </body> </html>
注意事项:1、显示地图的省份在geo中设置。
2、在使用 visualMap的时候 紧跟循环添加以下内容否则没有效果:
myChart.setOption({
visualMap:{
seriesIndex:[0,1,2,3,4,5,6,7]
},
series:series
});
3.svg图标的使用:进入阿里巴巴矢量图标库找到所需的图标下载,完成之后用编辑器打开,复制path的内容放入代码中即可。