<%@ 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的内容放入代码中即可。