vue+ECharts如何实现可视化地图绘制和省市区钻取并对接后端数据,如何用图片来渲染后端返回的坐标进行锚点?
“Devil组”引证GPT后的撰写:
以下是一个简单的示例,展示如何使用ECharts绘制地图和实现省市区钻取:
<template>
<div id="chart-container" style="width: 100%; height: 500px;"></div>
</template>
<script>
import echarts from 'echarts'
import chinaMapData from './china.json'
export default {
data() {
return {
chart: null
}
},
mounted() {
this.initChart()
},
methods: {
initChart() {
// 初始化ECharts实例
this.chart = echarts.init(document.getElementById('chart-container'))
// 设置地图数据
echarts.registerMap('china', chinaMapData)
// 设置初始省份地图数据
const initData = [
{name: '北京', value: 100},
{name: '天津', value: 100},
{name: '上海', value: 100},
{name: '重庆', value: 100},
{name: '河北', value: 100},
{name: '河南', value: 100},
{name: '云南', value: 100},
{name: '辽宁', value: 100},
{name: '黑龙江', value: 100},
{name: '湖南', value: 100},
{name: '安徽', value: 100},
{name: '山东', value: 100},
{name: '新疆', value: 100},
{name: '江苏', value: 100},
{name: '浙江', value: 100},
{name: '江西', value: 100},
{name: '湖北', value: 100},
{name: '广西', value: 100},
{name: '甘肃', value: 100},
{name: '山西', value: 100},
{name: '内蒙古', value: 100},
{name: '陕西', value: 100},
{name: '吉林', value: 100},
{name: '福建', value: 100},
{name: '贵州', value: 100},
{name: '广东', value: 100},
{name: '青海', value: 100},
{name: '西藏', value: 100},
{name: '四川', value: 100},
{name: '宁夏', value: 100},
{name: '海南', value: 100},
{name: '台湾', value: 100},
{name: '香港', value: 100},
{name: '澳门', value: 100}
]
// 设置地图配置项
const option = {
tooltip: {
trigger: 'item'
},
visualMap: {
min: 0,
max: 200,
left: 'left',
top: 'bottom',
text: ['高', '低'], // 文本,默认为数值文本
calculable: true
},
series: [
{
name: '省份数据',
type: 'map',
mapType: 'china',
label: {
show: true,
fontSize: 12
},
itemStyle: {
normal: {
borderWidth: 0.5, // 区域边框宽度
borderColor: '#ffffff', // 区域边框颜色
areaColor: '#eeeeee' // 区域颜色
},
emphasis: {
borderWidth: 0.5,
borderColor: '#ffffff',
areaColor: '#aaaaaa'
}
},
data: initData
}
]
} // 设置地图点击事件
this.chart.on('click', (params) => {
const name = params.name
console.log('点击了省份:', name)
this.loadCityData(name)
})
// 绘制地图
this.chart.setOption(option)
},
loadCityData(provinceName) {
console.log('加载城市数据:', provinceName)
// 这里省略省份对应城市数据加载的代码
// 实现方式:根据省份名字异步加载对应城市数据,然后更新地图
}
}
}
</script>
<style scoped>
/* 这里可以添加自定义样式 */
</style>
不知道你这个问题是否已经解决, 如果还没有解决的话:1、这个地方我用echarts
代替了this.$echarts
,所以代码里面都是用的echarts对象
2、修改代码中的路径,使用import方式导入的文件在打包后没问题,主要是第二张图片中的引入方式。
下面这种方式在本地运行时是没问题的,但是打包后会找不到地图文件,按我的代码的话,我需要将'../../../static/province/' + province + '.json'
修改为'./static/province/' + province + '.json'
后打包,才能在线上运行。
3、我使用的是懒加载的方式来加载省级地图的,有的人是一次性全部加载进去,像我在data里面注释的那种代码一样,那样的方式要import 34 个地图文件,然后循环注册地图。我使用的this.fetchGet()
这种请求函数是我自己封装好的,就和平常请求后台数据一样,不会的同学可以参考
this.map.dispose()
将地图对象注销,不然会发生以下情况。以上是echarts钻取地图时值得注意的坑,由于时间原因还有一些不完善的地方,请勿喷!!!
如果在使用过程中有遇到问题,欢迎大家留言讨论,这里是echarts地图资源数据,喜欢的朋友请点个赞呗,O(∩_∩)O哈哈~