首先我们需要知道echarts的地图的渲染需要依赖于json文件,例如:中国地图china.json
,广东地图guangdong.json
,广西地图guangxi.json
;也就是每个不同的json文件渲染不同的地图,想要渲染中国地图,就用china.json
的数据来渲染;
这些json文件在网上可以找到,json
文件的数据是通过ajax或jquery的请求方式来进行获取,下面来渲染下中国地图:
<body>
<div id="echarts" style="width:600px;height:400px;background: #4750e4;"></div>
</body>
<script>
// 创建echarts实例对象
var mCharts = echarts.init(document.getElementById('echarts'))
$.get(`./json/jsonMap/china.json`, function (res) {
// 注册地图的矢量数据
echarts.registerMap('chinaMap', res)
var option = {
geo: {
type: 'map',
map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
roam: true,
label: {
show: true // 展示省份的名称
},
zoom: 1, // 初始化的缩放比例
// center: [87.617733, 43.792818] // 地图的中心点
}
}
mCharts.setOption(option)
})
</script>
地图的下钻:实际上就是用不同的json文件来进行渲染,比如当点击广东省的时候,其实是用guangdong.json
文件来进行渲染;
let jsonMap = {
"广东": "guangdong"
}
// 创建echarts实例对象
var mCharts = echarts.init(document.getElementById('echarts'))
// 注册点击事件
mCharts.on('click', function (params) {
let area = jsonMap[params.name] // 这个为了获取被点击省份的json文件名
getMap(area) // 把被点击的json文件名传递后拼接在请求路径中
});
// 请求地图json数据
function getMap(area) {
$.get(`./json/jsonMap/${area}.json`, function (res) {
// 注册地图的矢量数据
echarts.registerMap('chinaMap', res)
var option = {
geo: {
type: 'map',
map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
roam: true,
label: {
show: true // 展示省份的名称
},
zoom: 1, // 初始化的缩放比例
// center: [87.617733, 43.792818] // 地图的中心点
}
}
mCharts.setOption(option)
})
}
返回到上一级:在渲染的时候先保存当前层级的json文件名,然后在进入下一个层级之前先把当前的层级json文件名作为下一个层级的父级json文件名,然后点击返回上一级时,用父级的json文件名请求的数据渲染即可;
完整的代码:
<!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">
<title>echarts地图</title>
<script src="./lib/echarts.min.js"></script>
<script src="./lib/jquery.min.js"></script>
</head>
<body>
<button onclick="onBack()">返回上一级</button>
<div id="echarts" style="width:600px;height:400px;background: #4750e4;"></div>
</body>
<script>
let jsonMap = {
"广东": "guangdong",
"广西": "guangxi",
"湖南": "hunan",
"安徽": "anhui",
"澳门": "aomen",
"北京": "beijing",
"重庆": "chongqing",
"福建": "fujian",
"甘肃": "gansu",
"贵州": "guizhou",
"海南": "hainan",
"河北": "hebei",
"黑龙江": "heilongjiang",
"河南": "henan",
"湖北": "hubei",
"江苏": "jiangsu",
"江西": "jiangxi",
"吉林": "jilin",
"辽宁": "liaoning",
"内蒙古": "neimenggu",
"宁夏": "ningxia",
"青海": "qinhai",
"山东": "shandong",
"山西": "shanxi",
"陕西": "shanxi1",
"四川": "sichuan",
"台湾": "taiwan",
"天津": "tianjin",
"香港": "xianggang",
"新疆": "xinjiang",
"西藏": "xizang",
"云南": "yunnan",
"浙江": "zhejiang"
}
// 定义两个变量,nowArea储存当前的区域,lastArea存储父级区域(当前的区域将作为下一个区域的父级)
let nowArea, lastArea
// 创建echarts实例对象
var mCharts = echarts.init(document.getElementById('echarts'))
// 初始化获取中国地图数据
getMap('china')
// 注册点击事件
mCharts.on('click', function (params) {
lastArea = nowArea // 获取父级的区域
let area = jsonMap[params.name]
getMap(area)
});
// 返回上一级
function onBack() {
getMap(lastArea)
}
// 请求地图json数据
function getMap(area) {
$.get(`./json/jsonMap/${area}.json`, function (res) {
// 注册地图的矢量数据
echarts.registerMap('chinaMap', res)
var option = {
geo: {
type: 'map',
map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
roam: true,
label: {
show: true // 展示省份的名称
},
zoom: 1, // 初始化的缩放比例
// center: [87.617733, 43.792818] // 地图的中心点
}
}
mCharts.setOption(option)
nowArea = area // 记录当前的区域,作为下一层级的父级
})
}
</script>
</html>