最近做项目要用到echarts制作省份气泡地图,现在来分享一下
做地图首先要有想要做那个地图的json,这里给大家一个最全地图json的链接
http://datav.aliyun.com/tools/atlas/#&lat=31.87755764334002&lng=104.150390625&zoom=3
里面有你所需要的各省级,市级地图
在箭头指向的地方搜索你需要的地图板块,红色框框里的json地址是你需要地图板块中的板块,如果只需要地图形状的话可以选择上面那个
下面我来贴一下代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="main" style="width: 800px;height: 800px;"></div>
<!--你所需要的盒子大小-->
</body>
<script src="js/jquery.min.js"></script>
<script src="js/echarts.min.js"></script>
<!--引入jquery和echarts的js-->
<script>
//这是你地图上显示的数据
var dataJson=[
{name: '上城区',value: 100 },{name: '下城区',value: 450 },
{name: '西湖区',value: 345 },{name: '拱墅区',value: 535 },
{name: '江干区',value: 320 },{name: '滨江区',value: 234 },
{name: '萧山区',value: 189 },{name: '余杭区',value: 99 },
{name: '富阳区',value: 79 },{name: '临安区',value: 190 },
{name: '桐庐县',value: 390 },{name: '淳安县',value: 360 },
{name: '建德市',value: 269 },
];
//获取杭州市的地图信息
window.onload = function GetGeoMap() {
var geoJson = null;
var url = "js/full.json";
MapChart.showLoading();
$.get(url, null, function (ret) {
geoJson = ret;
loadMap(geoJson);
});
}
//初始化地图容器
var MapChart = echarts.init(document.getElementById('main'));
//设置地图。
var loadMap = function (geoJson) {
echarts.registerMap('tianjin', geoJson);
MapChart.hideLoading();
var data = dataJson;
//var xData = [];
//for (var i = 0; i < data.length; i++) {
// xData.push(data[i].value);
//}
//气泡点的位置
var geoCoordMap = {
'上城区':[120.171465,30.215236],
'下城区':[120.172763,30.326271],
'西湖区':[120.027376,30.132934],
'拱墅区':[120.204053,30.374697],
'江干区':[120.362633,30.276603],
'滨江区':[120.198623,30.166615],
'萧山区':[120.150693,29.962932],
'余杭区':[119.801737,30.421187],
'富阳区':[119.949869,29.849871],
'临安区':[119.315101,30.231153],
'桐庐县':[119.585045,29.797437],
'淳安县':[118.624346,29.404177],
'建德市':[119.279089,29.472284],
}
//计算气泡大小的依赖
//xData.sort(function (a, b) {
// return a - b;
//});
//var min = xData[0], max = xData[xData.length - 1];
//var maxSize4Pin = 100, minSize4Pin = 20;
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value)
});
}
}
return res;
};
var option = {
tooltip: {
trigger: 'item',
//鼠标放上去显示的数据和文字
formatter: function (params) {
if (typeof (params.value)[2] == "undefined") {
return params.name + ' : ' + params.value;
} else {
return params.name + ' : ' + params.value[2];
}
}
},
//在地图旁显示的数据
visualMap: {
show: false,
type: 'piecewise',
pieces: [
{ min: 600 },
{ min: 400, max: 599 },
{ min: 300, max: 399 },
{ min: 200, max: 299 },
{ min: 100, max: 199 },
{ min: 0, max: 99 },
// {min:0,max: 2000},
// {max:100}// 不指定 min,表示 min 为无限大(-Infinity)。
],
calculable: true,
seriesIndex: [1],
//颜色分类
inRange: {
color: ['#9fb5ea','#5475f5', '#9feaa5', '#85daef','#74e2ca', '#e6ac53', ]
}
},
geo: {
show: true,
map: 'tianjin',
label: {
normal: {
show: false
},
emphasis: {
show: false,
}
},
//鼠标是否支持缩放
roam: true,
itemStyle: {
normal: {
areaColor: '#031525',
borderColor: '#fff',
borderWidth: 2,
},
emphasis: {
areaColor: '#56ddff', //鼠标放上去的亮色
}
}
},
series: [
{
name: 'credit_pm2.5',
type: 'scatter',
coordinateSystem: 'geo',
data: convertData(data),
//计算气泡大小
symbolSize: function (val) {
//根据数据调整气泡大小
//var a = (maxSize4Pin - minSize4Pin) / (max - min);
//var b = minSize4Pin - a * min;
//b = maxSize4Pin - a * max;
//return a * val[2] + b;
//自定义气泡大小
return 5;
},
label: {
//鼠标放上去显示的文字和数据
normal: {
formatter: '{b}',
position: 'right',
show: true
},
emphasis: {
show: true
}
},
itemStyle: {
normal: {
color: '#fff',
areaColor: '#FBE805',
// borderColor: '#FBE805',
},
emphasis: {
areaColor: '#FBE805'
}
},
},
{
type: 'map',
map: 'tianjin',
geoIndex: 0,
aspectScale: 0.75, //长宽比
showLegendSymbol: false, // 存在legend时显示
label: {
normal: {
show: false
},
emphasis: {
show: false,
textStyle: {
color: '#fff'
}
}
},
roam: true,
itemStyle: {
normal: {
areaColor: '#031525',
borderColor: '#3B5077',
},
emphasis: {
areaColor: '#2B91B7'
}
},
animation: false,
data: data
},
{
name: '点',
type: 'scatter',
coordinateSystem: 'geo',
symbol: 'pin',
data: convertData(data),
symbolSize: function (val) {
// var a = (maxSize4Pin - minSize4Pin) / (max - min);
// var b = minSize4Pin - a * min;
// b = maxSize4Pin - a * max;
// return a * val[2] + b;//计算并返回气泡大小
return 40;
},
label: {
normal: {
show: true,
formatter: function (params) {
if (typeof (params.value)[2] == "undefined") {
return params.value;
} else {
return params.value[2];
}
},
textStyle: {
color: '#fff',//文字颜色
fontSize: 9,
}
}
},
itemStyle: {
normal: {
color: '#2080F7', //标志颜色
}
},
zlevel: 6,
},
{
name: 'Top 5',
type: 'effectScatter',
coordinateSystem: 'geo',
data: convertData(data.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 1)),
symbolSize: function (val) {
return 5;
},
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
formatter: '{b}',
position: 'right',
show: true
}
},
itemStyle: {
normal: {
color: '#fff',
shadowBlur: 10,
shadowColor: '#dece00'
}
},
zlevel: 1
},
]
};
MapChart.setOption(option);
}
</script>
</html>
最后效果如下图: