> 使用时间:2023年5月16日

> 版本:"echarts": "^5.4.0","echarts-gl": "^2.0.9",

最近业务需要地图下钻,网上搜了一圈,乱七八糟的,还有Vue里用JQ的(简直了)

### 流程图

![Echarts地图下钻-导出.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/44a359c0f83341f8b77138fb2ae3d15d~tplv-k3u1fbpfcp-watermark.image?)

> 忽略项目引入,直奔主题

以下写法是Vue选项式,未精简封装,仅供刚接触Echarts小白参考

```

<template>

<div id="mymap" style="width: 500px;height:600px;"></div>

</template>

```

```

<script>

// 引入本地全国地图Json

import china from '/china.json'

theRequestMap() {

// 地图数据格式匹配,"河南省"是要匹配点击时候获取的省名,"henan"为本地Json的名字

let chinacod = {

"河南省": "henan",

......

}

// 创建echarts实例对象

let mCharts = this.$echarts.init(document.getElementById('myhenanmap'))

// 生成地图并使用本地Json地图数据

this.$echarts.registerMap('china', china)

// 地图数据

let option = {

geo: {

type: 'map',

map: 'china', // 要与this.$echarts.registerMap('china', china)中的第一个参数保持一致

......

}

}

// 地图点击事件,在这里实现下钻

mCharts.on('click', function (params) {

//设置无下钻区域提示信息

if (!chinacod[params.name]) {

ElMessage({

message: '无此区域地图显示',

type: 'warning',

})

return;

}

// 获取地图点击区域的名字,根据名字请求本地地图Json

let area = chinacod[params.name]

axios.get(`static/${area}.json`)

.then(response => {

// 重新生成地图的Json数据

_this.$echarts.registerMap('chinaMap', response.data)

// 记录当前的区域,返回上地图的标识

_this.nowArea = area

// 使用setOption方法将地图重置为点击的市区

mCharts.setOption({

geo: {

type: 'map',

map: 'chinaMap', // 要与registerMap中的第一个参数保持一致

// 地图大小设置

layoutCenter: ["50%", "50%"],

layoutSize: '85%',

}

});

})

.catch(error => {

ElMessage({

message: '请求失败!',

type: 'error',

})

});

});

// 设置图标数据

option && mCharts.setOption(option);

}

// 地图返回上一级地图事件

onBack() {

//this.nowArea是地图点击时候存储的地图标识

this.theRequestMap(this.nowArea)

}

</script>

```