最近做項目要用到echarts制作省份氣泡地圖混萝,現(xiàn)在來分享一下
做地圖首先要有想要做那個地圖的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>
//這是你地圖上顯示的數(shù)據(jù)
var dataJson=[
{name: '上城區(qū)',value: 100 },{name: '下城區(qū)',value: 450 },
{name: '西湖區(qū)',value: 345 },{name: '拱墅區(qū)',value: 535 },
{name: '江干區(qū)',value: 320 },{name: '濱江區(qū)',value: 234 },
{name: '蕭山區(qū)',value: 189 },{name: '余杭區(qū)',value: 99 },
{name: '富陽區(qū)',value: 79 },{name: '臨安區(qū)',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'));
//設(shè)置地圖瓢剿。
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 = {
'上城區(qū)':[120.171465,30.215236],
'下城區(qū)':[120.172763,30.326271],
'西湖區(qū)':[120.027376,30.132934],
'拱墅區(qū)':[120.204053,30.374697],
'江干區(qū)':[120.362633,30.276603],
'濱江區(qū)':[120.198623,30.166615],
'蕭山區(qū)':[120.150693,29.962932],
'余杭區(qū)':[119.801737,30.421187],
'富陽區(qū)':[119.949869,29.849871],
'臨安區(qū)':[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',
//鼠標放上去顯示的數(shù)據(jù)和文字
formatter: function (params) {
if (typeof (params.value)[2] == "undefined") {
return params.name + ' : ' + params.value;
} else {
return params.name + ' : ' + params.value[2];
}
}
},
//在地圖旁顯示的數(shù)據(jù)
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) {
//根據(jù)數(shù)據(jù)調(diào)整氣泡大小
//var a = (maxSize4Pin - minSize4Pin) / (max - min);
//var b = minSize4Pin - a * min;
//b = maxSize4Pin - a * max;
//return a * val[2] + b;
//自定義氣泡大小
return 5;
},
label: {
//鼠標放上去顯示的文字和數(shù)據(jù)
normal: {
formatter: '',
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: '坦康',
position: 'right',
show: true
}
},
itemStyle: {
normal: {
color: '#fff',
shadowBlur: 10,
shadowColor: '#dece00'
}
},
zlevel: 1
},
]
};
MapChart.setOption(option);
}
</script>
</html>
最后效果如下圖: