由于项目需要,做一个地图相关的需求研究了一波,分享出来,希望对大家有所帮助
效果图如下:
代码如下:
前台jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Map"%>
<%
String path = request.getContextPath();
String orgkey = request.getParameter("orgkey");
path+="/dealmap?f="+System.currentTimeMillis()+"&orgkey="+orgkey;
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="ECharts">
<title>ECharts · Example</title>
<script type="text/javascript" src="webos/js/jquery.js"></script>
<script type="text/javascript" src="webos/js/echarts.min.js"></script>
</head>
<body>
<div id="chart" class="chart" style="height: 530px;"></div>
<script type="text/javascript">
//散点相关信息
var fenCompany = [{"cp":[120.756939,31.645717],"name":"常熟分公司"},
{"cp":[121.126012,31.454056],"name":"太仓分公司"},
{"cp":[120.651997,31.168648],"name":"吴江分公司"},
{"cp":[120.98034,31.389019],"name":"昆山分公司"},
{"cp":[120.553886,31.867892],"name":"张家港分公司"}]
// 基于准备好的dom,初始化echarts图表
var myChart = echarts.init(document.getElementById('chart'));
var option=null;
//各省份的地图json文件
var provinces = {
'上海': 'webos/map/json/data-1482909900836-H1BC_1WHg.json',
'河北': 'webos/map/json/data-1482909799572-Hkgu_yWSg.json',
'山西': 'webos/map/json/data-1482909909703-SyCA_JbSg.json',
'内蒙古': 'webos/map/json/data-1482909841923-rkqqdyZSe.json',
'辽宁': 'webos/map/json/data-1482909836074-rJV9O1-Hg.json',
'吉林': 'webos/map/json/data-1482909832739-rJ-cdy-Hx.json',
'黑龙江': 'webos/map/json/data-1482909803892-Hy4__J-Sx.json',
'江苏': 'webos/map/json/data-1482909823260-HkDtOJZBx.json',
'浙江': 'webos/map/json/data-1482909960637-rkZMYkZBx.json',
'安徽': 'webos/map/json/data-1482909768458-HJlU_yWBe.json',
'福建': 'webos/map/json/data-1478782908884-B1H6yezWe.json',
'江西': 'webos/map/json/data-1482909827542-r12YOJWHe.json',
'山东': 'webos/map/json/data-1482909892121-BJ3auk-Se.json',
'河南': 'webos/map/json/data-1482909807135-SJPudkWre.json',
'湖北': 'webos/map/json/data-1482909813213-Hy6u_kbrl.json',
'湖南': 'webos/map/json/data-1482909818685-H17FOkZSl.json',
'广东': 'webos/map/json/data-1482909784051-BJgwuy-Sl.json',
'广西': 'webos/map/json/data-1482909787648-SyEPuJbSg.json',
'海南': 'webos/map/json/data-1482909796480-H12P_J-Bg.json',
'四川': 'webos/map/json/data-1482909931094-H17eKk-rg.json',
'贵州': 'webos/map/json/data-1482909791334-Bkwvd1bBe.json',
'云南': 'webos/map/json/data-1482909957601-HkA-FyWSx.json',
'西藏': 'webos/map/json/data-1482927407942-SkOV6Qbrl.json',
'陕西': 'webos/map/json/data-1482909918961-BJw1FyZHg.json',
'甘肃': 'webos/map/json/data-1482909780863-r1aIdyWHl.json',
'青海': 'webos/map/json/data-1482909853618-B1IiOyZSl.json',
'宁夏': 'webos/map/json/data-1482909848690-HJWiuy-Bg.json',
'新疆': 'webos/map/json/data-1482909952731-B1YZKkbBx.json',
'北京': 'webos/map/json/data-1482818963027-Hko9SKJrg.json',
'天津': 'webos/map/json/data-1482909944620-r1-WKyWHg.json',
'重庆': 'webos/map/json/data-1482909775470-HJDIdk-Se.json',
'香港': 'webos/map/json/data-1461584707906-r1hSmtsx.json',
'澳门': 'webos/map/json/data-1482909771696-ByVIdJWBx.json'
};
//各省份的数据
var allData = [{
name: '北京'
}, {
name: '天津'
}, {
name: '上海'
}, {
name: '重庆'
}, {
name: '河北'
}, {
name: '河南'
}, {
name: '云南'
}, {
name: '辽宁'
}, {
name: '黑龙江'
}, {
name: '湖南'
}, {
name: '安徽'
}, {
name: '山东'
}, {
name: '新疆'
}, {
name: '江苏'
}, {
name: '浙江'
}, {
name: '江西'
}, {
name: '湖北'
}, {
name: '广西'
}, {
name: '甘肃'
}, {
name: '山西'
}, {
name: '内蒙古'
}, {
name: '陕西'
}, {
name: '吉林'
}, {
name: '福建'
}, {
name: '贵州'
}, {
name: '广东'
}, {
name: '青海'
}, {
name: '西藏'
}, {
name: '四川'
}, {
name: '宁夏'
}, {
name: '海南'
}, {
name: '台湾'
}, {
name: '香港'
}, {
name: '澳门'
}];
for (var i = 0; i < allData.length; i++) {
//allData[i].value = Math.round(Math.random() * 100);
allData[i].value = 0;
allData[i].yyb = 0;
allData[i].dgqyzx = 0;
allData[i].zxyyb = 0;
allData[i].fgs = 0;
allData[i].highriskorg = 0;
}
loadMap('webos/map/json/data-1527045631990-r1dZ0IM1X.json', 'china');//初始化全国地图
var timeFn = null;
//单击切换到省级地图,当mapCode有值,说明可以切换到下级地图
myChart.on('click', function(params) {
clearTimeout(timeFn);
//由于单击事件和双击事件冲突,故单击的响应事件延迟250毫秒执行
timeFn = setTimeout(function() {
var name = params.name; //地区name
var mapCode = provinces[name]; //地区的json数据
if (!mapCode) {
return;
}
loadMap(mapCode, name);
}, 250);
});
var data = []
//创建一个散点数组,用于保存经纬度坐标以及项目数量,从而在地图上显示地市项目数量
var cityProjData = [];
//将城市数据整理到地图数据中
fenCompany.forEach(function(v) {
// 地区名称
var name = v.name;
data.push({
name: name,
value: Math.round(Math.random() * 10 + 10)
})
cityProjData.push({
name: name,
value: v.cp.concat(Math.round(Math.random() * 10 + 10))//将坐标数组和项目数量组合到一个数组中
})
});
// 绑定双击事件,返回全国地图
myChart.on('dblclick', function(params) {
//当双击事件发生时,清除单击事件,仅响应双击事件
clearTimeout(timeFn);
//返回全国地图
loadMap('webos/map/json/data-1527045631990-r1dZ0IM1X.json', 'china');
});
/**
获取对应的json地图数据,然后向echarts注册该区域的地图,最后加载地图信息
@params {String} mapCode:json数据的地址
@params {String} name: 地图名称
*/
function loadMap(mapCode, name) {
$.get(mapCode, function(data) {
if (data) {
echarts.registerMap(name, data);
option = {
title: {
text: '风险地图',
subtext: '双击返回中国地图',
left: 'center'
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false},
magicType: {show: false, type: ['line', 'map']},
restore: {show: false},
saveAsImage: {show: true}
}
},
tooltip: {
show: true,
formatter: function(params) {
if (params.data) {
if(typeof(params.data.value[2]) != "undefined"){
return params.name + '</br>'
+ '下辖营业部数:'+params.data.value[2] +'</br>'
+ '低风险营业部数:'+params.data.value[3] +'</br>'
+ '中风险营业部数:'+params.data.value[4] +'</br>'
+ '中高风险营业部数:'+params.data.value[5] +'</br>'
+ '高风险营业部数:'+params.data.value[6] +'</br>'
}else{
return params.name + '</br>'
+ '分公司数:'+params.data['fgs'] +'</br>'
+ '区域代管中心:'+params.data['dgqyzx'] +'</br>'
+ '中心营业部:'+params.data['zxyyb'] +'</br>'
+ '营业部:'+params.data['yyb'] +'</br>'
+ '其中高风险营业部数:'+params.data['highriskorg']
}
}
},
},
geo: {
show: true,
map: name,
label: {
normal: {
show: true
},
emphasis: {
show: true,
}
},
roam: false,
itemStyle: {
normal: {
areaColor: '#fff',
borderColor: '#3B5077',
},
emphasis: {
areaColor: '#FFD700',
}
}
},
visualMap: {
type: 'continuous',
text: ['', ''],
showLabel: true,
left: '50',
min: 0,
max: 100,
inRange: {
//color: ['#edfbfb', '#b7d6f3', '#40a9ed', '#3598c1', '#215096', ]
color: ['#b7d6f3','#228B22','#880000','#B22222','#FF0000']
},
splitNumber: 0
},
series: [{
name: 'MAP',
type: 'map',
map: name,
mapType: name,
geoIndex: 0,
aspectScale: 0.75, //长宽比
showLegendSymbol: false, // 存在legend时显示
selectedMode: 'false',//是否允许选中多个区域
label: {
normal: {
show: true
},
emphasis: {
show: true
}
},
roam: true,
itemStyle: {
normal: {
areaColor: '#031525',
borderColor: '#0227ad',
},
emphasis: {
areaColor: '#2B91B7'
}
},
animation: false,
data: allData
},{
name: '点',
type: 'scatter',
coordinateSystem: 'geo',
symbol: 'pin', //气泡 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
symbolSize: function (data) {
return data[2]*6;
},
emphasis: {
label: {
show: true,
formatter: function (param) {
return param.data.value[2];
},
position: 'top'
}
},
itemStyle: {
shadowBlur: 10,
shadowColor: 'rgba(25, 100, 150, 0.5)',
shadowOffsetY: 5,
color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
offset: 0,
color: 'rgb(129, 227, 238)'
}, {
offset: 1,
color: 'rgb(25, 183, 207)'
}])
},
zlevel: 6,
data: cityProjData,
}]
};
myChart.setOption(option);
} else {
alert('无法加载该地图');
}
});
}
$.ajax({
url: '<%=path%>',
type: 'POST',
data: "",
dataType: 'json',
error: function() {
alert("系统Session过期,请重新登录系统后,在操作!");
},
success: function(res) {
if (res.success == "1"){
getRsikProvince(res.riskData);
getInfo(res.hoverInfos);
getCompanyInfo(res.fenConpanyInfos)
myChart.setOption(option);
}
}
});
function getInfo(list) {
$.each(list, function(index, element) {
allData[element.PROVINCE_NAME].yyb=element.YYB;
allData[element.PROVINCE_NAME].dgqyzx=element.DGQYZX;
allData[element.PROVINCE_NAME].zxyyb=element.ZXYYB;
allData[element.PROVINCE_NAME].fgs=element.FGS;
allData[element.PROVINCE_NAME].highriskorg=element.HIGHRISKORG;
});
}
function getCompanyInfo(list) {
$.each(list, function(index, element) {
if(element.company=='常熟分公司'){
cityProjData[0].value[2]=element.orgNum;
cityProjData[0].value[3]=element.lowCount;
cityProjData[0].value[4]=element.midCount;
cityProjData[0].value[5]=element.midHighCount;
cityProjData[0].value[6]=element.highCount;
}else if(element.company=='太仓分公司'){
cityProjData[1].value[2]=element.orgNum;
cityProjData[1].value[3]=element.lowCount;
cityProjData[1].value[4]=element.midCount;
cityProjData[1].value[5]=element.midHighCount;
cityProjData[1].value[6]=element.highCount;
}else if(element.company=='吴江分公司'){
cityProjData[2].value[2]=element.orgNum;
cityProjData[2].value[3]=element.lowCount;
cityProjData[2].value[4]=element.midCount;
cityProjData[2].value[5]=element.midHighCount;
cityProjData[2].value[6]=element.highCount;
}else if(element.company=='昆山分公司'){
cityProjData[3].value[2]=element.orgNum;
cityProjData[3].value[3]=element.lowCount;
cityProjData[3].value[4]=element.midCount;
cityProjData[3].value[5]=element.midHighCount;
cityProjData[3].value[6]=element.highCount;
}else if(element.company=='张家港分公司'){
cityProjData[4].value[2]=element.orgNum;
cityProjData[4].value[3]=element.lowCount;
cityProjData[4].value[4]=element.midCount;
cityProjData[4].value[5]=element.midHighCount;
cityProjData[4].value[6]=element.highCount;
}
});
}
//给风险区域赋值,用来区分颜色用
function getRsikProvince(list) {
$.each(list, function(index, element) {
if(element.FX_LEVEL=='中风险'){
allData[element.PROVINCE_NAME].value=50;
}else if(element.FX_LEVEL=='中高风险'){
allData[element.PROVINCE_NAME].value=75;
}else if(element.FX_LEVEL=='高风险'){
allData[element.PROVINCE_NAME].value=100;
}else if(element.FX_LEVEL=='低风险'){
allData[element.PROVINCE_NAME].value=25;
}
});
}
</script>
</body>
</html>
还有需要引用一些省份json的文件,需要自行下载。
后台写好控制器,像前台传数据即可实现上图效果。