vue中引入Ecahrts地图

先来张效果图:
在这里插入图片描述

1、首先我们需要先去网上找一份按地域行政编码命名的JSON文件,你想实现哪个城市的地图就找对应城市的JSON文件,可以任意从下面两个平台下载:
DataV.GeoAtlas地理小工具系列
在这里插入图片描述
echarts-map最新实时geoJson文件下载_hxkj.vip_HashTang
在这里插入图片描述

注意:第②方式下载的文件后缀是.geoJson,需要重命名改为.json即可。

2、接下来就是引入Echarts使用
① npm引入echarts

npm install echarts --save

② 在 main.js 中添加下面两行代码,全局引入echarts

import echarts from 'echarts'

Vue.prototype.$echarts = echarts

注:import echarts from ‘echarts’ 引入echarts后,不能全局使用echarts,所以通过Vue.prototype将echarts保存为全局变量

③ 1>先来一份简单的使用(没有动态请求地图data数据),新建一个Vue文件
要点:div盒子容器,给它固定宽

<template>
	<div class="mapInfo">
		<div class="top">
			<span class="title">养殖场数量分布情况</span>
			<div class="echartInfo" id="echartInfo" style="width:500px;height:450px"></div>
			
			<!-- 这是采用ref,如果是这种,下方调用的话就可以使用this.$refs.echartInfo
			<div class="echartInfo" ref="echartInfo" style="width:500px;height:450px"></div>
			 -->
			 
		</div>
	</div>
</template>
<script>
	import zhanjiangMP from "@/static/js/城市.json"//引入路径看自己所存JSON位置
	export default {
		data() {
			return {
				option: {
					title: {
						text: '',
						subtext: '',
						sublink: ''
					},
					tooltip: {
						trigger: 'item',
						formatter: '{b}<br/>{c}'
					},
					visualMap: {
						min: 800,
						max: 50000,
						text: ['High', 'Low'],
						realtime: false,
						calculable: true,
						inRange: {
							color: ['lightskyblue', 'yellow', 'orangered'],
						},
					},
					series: [{
						name: '',
						type: 'map',
						map: 'zhanjiang',
						label: {
							show: false
						},
						data: [
							{
								name: '廉江市',
								value: 15477
							},
							{
								name: '遂溪县',
								value: 15477
							},
							{
								name: '吴川市',
								value: 31686
							},
							{
								name: '坡头区',
								value: 6992
							},
							{
								name: '赤坎区',
								value: 44045
							},
							{
								name: '霞山区',
								value: 40689
							},
							{
								name: '麻章区',
								value: 37659
							},
							{
								name: '雷州市',
								value: 45180
							},
							{
								name: '徐闻县',
								value: 55204
							}
						]
					}]
				},
			}
		},
		mounted() {
			this.initEchartInfo();//执行initEchartInfo方法
		},
		methods: {
			initEchartInfo() {
				//let echarts = require('echarts');//若有在main.js全局引入就不需要这一行
				echarts.init(document.getElementById("echartInfo")).dispose();//销毁,这一步是考虑到有时候会动态改变地图data数据,先销毁再初始化
				let myChart = echarts.init(document.getElementById("echartInfo"));//初始化
				//let myChart = echarts.init(this.$refs.echartInfo);//初始化(ref)
				echarts.registerMap('zhanjiang', zhanjiangMP);//这一步是引用JSON文件,第一个参数需要和上面series.map的名称对应
				myChart.setOption(this.option);//此处option对象是写在全局data里面,也可以直接写在initEchartInfo()方法里面,如let option = {}。看自己所需
			},
		},
	}
</script>
<style lang="scss" scoped>
	
</style>

关于option里面的属性,大家可以直接在echarts官网上找配置手册
option属性配置手册

2>刚才那一份写法是没有动态改变option.series[0].data里面的数据的,现在来一份动态改变data的写法。

要点:myChart.setOption(this.option);这一行代码的调用顺序很重要,事关你动态改变的数据能不能响应,即这一行需要在axios请求数据后调用,地图上面的数据才会动态响应。

<template>
	<div class="mapInfo">
		<div class="top">
			<span class="title">养殖场数量分布情况</span>
			<div class="echartInfo" id="echartInfo" style="width:500px;height:450px"></div>
			
			<!-- 这是采用ref,如果是这种,下方调用的话就可以使用this.$refs.echartInfo
			<div class="echartInfo" ref="echartInfo" style="width:500px;height:450px"></div>
			 -->
			 
		</div>
	</div>
</template>
<script>
	import zhanjiangMP from "@/static/js/城市.json"//引入路径看自己所存JSON位置
	export default {
		data() {
			return {
				myChart:null,//全局变量,方便myChart.setOption(this.option)在其他Axios请求函数调用
				option: {
					title: {
						text: '',
						subtext: '',
						sublink: ''
					},
					tooltip: {
						trigger: 'item',
						formatter: '{b}<br/>{c}'
					},
					visualMap: {
						min: 800,
						max: 50000,
						text: ['High', 'Low'],
						realtime: false,
						calculable: true,
						inRange: {
							color: ['lightskyblue', 'yellow', 'orangered'],
						},
					},
					series: [{
						name: '',
						type: 'map',
						map: 'zhanjiang',
						label: {
							show: false
						},
						data: [],//看axios请求的数据
					}]
				},
			}
		},
		mounted() {
			this.initEchartInfo();//执行initEchartInfo方法
		},
		methods: {
			//获取地图接口数据
		    getAxiosData() {
		      let self = this;
		      let params = {
		      	//这里放置接口请求需要的参数
		      };
		      //以下是接口请求
		      self.$api.dataCount
		        .getAxiosData(params )
		        .then((res) => {
		          if (res.data.code === 1) {
		            self.option.series[0].data = res.data.data.map((item) => {
		              return {
		                name: item.areaName,
		                value: item.num,
		              }; //目的是将接口返回的数据转为地图展示需要的格式,然后赋给option.series[0].data
		            });

					//这一行就是关键,需要在请求完数据后才执行这一行,不然地图上面的数据不会响应
		            self.myChart.setOption(self.option);
		            
		          }
		        })
		        .catch(() => {});
		    },
			initEchartInfo() {
				//let echarts = require('echarts');//若有在main.js全局引入就不需要这一行
				echarts.init(document.getElementById("echartInfo")).dispose();//销毁,这一步是考虑到有时候会动态改变地图data数据,先销毁再初始化
				this.myChart = echarts.init(document.getElementById("echartInfo"));//初始化
				//this.myChart = echarts.init(this.$refs.echartInfo);//初始化(ref)
				echarts.registerMap('zhanjiang', zhanjiangMP);//这一步是引用JSON文件,第一个参数需要和上面series.map的名称对应
				this.getAxiosData();//调用执行接口请求方法
			},
		},
	}
</script>
<style lang="scss" scoped>
	
</style>

总结:以上就是关于echarts地图的展示用法

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spring_z7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值