vue+echarts实现中国地图流动效果(步骤详解)


Posted in Vue.js onJanuary 27, 2021

@vue+echarts实现中国地图流动效果

#话不多说看效果图

vue+echarts实现中国地图流动效果(步骤详解)

操作步骤:

执行命令:npm run echarts -s 并回车

vue+echarts实现中国地图流动效果(步骤详解)

看到这样的提示代表安装成功 PS:网络不好的情况建议用cnpm淘宝镜像(全局终端执行命令:npm i -g cnpm --registry=https://registry.npm.taobao.org)

vue+echarts实现中国地图流动效果(步骤详解)

下载china.js

链接: https://pan.baidu.com/s/1EODVh9tJNEbFebbrhKyd_Q 提取码: gjz4

引入

import echarts from 'echarts/lib/echarts';
import '@/map/china.js';

写一个echarts容器 绑定ref

<div class="wrapper">
 <div class="map-container" style="width: 100%; height: 100%" ref="myEchart" ></div>
</div>

配置option (有必要的注释都已标记)

<script>
let echarts = require("echarts");
import "echarts/lib/component/markLine";
mounted(){
 let data = [
 			{ "name": "北京", "dataCount": [0, 1, 0, 0, 0, 0, 1], "id": "247" }, {
 			"name": "天津",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "248"
 		}, { "name": "河北", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "249" }, {
 			"name": "山西",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "250"
 		}, { "name": "内蒙古", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "251" }, {
 			"name": "辽宁",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "252"
 		}, { "name": "吉林", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "253" }, {
 			"name": "黑龙江",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "254"
 		}, { "name": "上海", "dataCount": [0, 1, 0, 0, 0, 0, 0], "id": "255" }, {
 			"name": "江苏",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "256"
 		}, { "name": "浙江", "dataCount": [0, 1, 0, 0, 0, 0, 0], "id": "257" }, {
 			"name": "安徽",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "258"
 		}, { "name": "福建", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "259" }, {
 			"name": "江西",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "260"
 		}, { "name": "山东", "dataCount": [14235, 820, 0, 35, 0, 0, 4], "id": "261" }, {
 			"name": "河南",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "262"
 		}, { "name": "湖北", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "263" }, {
 			"name": "湖南",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "264"
 		}, { "name": "广东", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "265" }, {
 			"name": "广西",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "266"
 		}, { "name": "海南", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "267" }, {
 			"name": "重庆",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "268"
 		}, { "name": "四川", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "269" }, {
 			"name": "贵州",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "270"
 		}, { "name": "云南", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "271" }, {
 			"name": "西藏",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "272"
 		}, { "name": "陕西", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "273" }, {
 			"name": "甘肃",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "274"
 		}, { "name": "青海", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "275" }, {
 			"name": "宁夏",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "276"
 		}, { "name": "新疆", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "277" }, {
 			"name": "台湾",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "278"
 		}, { "name": "香港", "dataCount": [0, 0, 0, 0, 0, 0, 0], "id": "279" }, {
 			"name": "澳门",
 			"dataCount": [0, 0, 0, 0, 0, 0, 0],
 			"id": "280"
 }]
 let chinaGeoCoordMap ={
 					'黑龙江': [127.9688, 45.368,1],
 					'内蒙古': [110.3467, 41.4899,1],
 					'吉林': [125.8154, 44.2584,1],
 					'北京': [116.4551, 40.2539,2],
 					'辽宁': [123.1238, 42.1216,1],
 					'河北': [114.4995, 38.1006,1],
 					'天津': [117.4219, 39.4189,1],
 					'山西': [112.3352, 37.9413,1],
 					'陕西': [109.1162, 34.2004,1],
 					'甘肃': [103.5901, 36.3043,1],
 					'宁夏': [106.3586, 38.1775,1],
 					'青海': [101.4038, 36.8207,1],
 					'新疆': [87.9236, 43.5883,1],
 					'西藏': [91.11, 29.97,1],
 					'四川': [103.9526, 30.7617,1],
 					'重庆': [108.384366, 30.439702,1],
 					'山东': [117.1582, 36.8701,1],
 					'河南': [113.4668, 34.6234,1],
 					'江苏': [118.8062, 31.9208,1],
 					'安徽': [117.29, 32.0581,1],
 					'湖北': [114.3896, 30.6628,1],
 					'浙江': [119.5313, 29.8773,1],
 					'福建': [119.4543, 25.9222,1],
 					'江西': [116.0046, 28.6633,1],
 					'湖南': [113.0823, 28.2568,1],
 					'贵州': [106.6992, 26.7682,1],
 					'云南': [102.9199, 25.4663,1],
 					'广东': [113.12244, 23.009505,1],
 					'广西': [108.479, 23.1152,1],
 					'海南': [110.3893, 19.8516,1],
 					'上海': [121.4648, 31.2891,1],
 					'台湾': [120.991676054688, 24.7801149726563,1],
 					'澳门': [113.33, 22.11,1],
 					'香港': [114.15, 22.15,1]
 }
 for (let i=0;i<data.length;i++){
 			var da = chinaGeoCoordMap[data[i].name];
 			chinaGeoCoordMap[data[i].name]=[...da,...data[i].dataCount];
 }
 let chinaDatas = [
 			[{
 			name: '北京',
 			value: 2
 			}], [{
 			name: '黑龙江',
 			value: 1
 			}], [{
 			name: '内蒙古',
 			value: 1
 			}], [{
 			name: '吉林',
 			value: 1
 			}], [{
 			name: '辽宁',
 			value: 1
 			}], [{
 			name: '河北',
 			value: 1
 			}], [{
 			name: '天津',
 			value: 1
 			}], [{
 			name: '山西',
 			value: 1
 			}], [{
 			name: '陕西',
 			value: 1
 			}], [{
 			name: '甘肃',
 			value: 1
 			}], [{
 			name: '宁夏',
 			value: 1
 			}], [{
 			name: '青海',
 			value: 1
 			}], [{
 			name: '新疆',
 			value: 1
 			}], [{
 			name: '西藏',
 			value: 1
 			}], [{
 			name: '四川',
 			value: 1
 			}], [{
 			name: '重庆',
 			value: 1
 			}], [{
 			name: '山东',
 			value: 1
 			}], [{
 			name: '河南',
 			value: 1
 			}], [{
 			name: '江苏',
 			value: 1
 			}], [{
 			name: '安徽',
 			value: 1
 			}], [{
 			name: '湖北',
 			value: 1
 			}], [{
 			name: '浙江',
 			value: 1
 			}], [{
 			name: '福建',
 			value: 1
 			}], [{
 			name: '江西',
 			value: 1
 			}], [{
 			name: '湖南',
 			value: 1
 			}], [{
 			name: '贵州',
 			value: 1
 			}], [{
 			name: '广东',
 			value: 1
 			}], [{
 			name: '广西',
 			value: 1
 			}], [{
 			name: '云南',
 			value: 1
 			}], [{
 			name: '海南',
 			value: 1
 			}], [{
 			name: '上海',
 			value: 1
 			}], [{
 			name: '台湾',
 			value: 1
 			}], [{
 			name: '澳门',
 			value: 1
 			}], [{
 			name: '香港',
 			value: 1
 			}]
 ]
 let convertData = function (data) {
 			var res = [];
 			for (var i = 0; i < data.length; i++) {
 			var dataItem = data[i];
 			var fromCoord = [chinaGeoCoordMap[dataItem[0].name][0], chinaGeoCoordMap[dataItem[0].name][1]];
 			var toCoord = [117.1582, 36.8701];
 			if (fromCoord && toCoord) {
 				res.push([{
 				coord: fromCoord,
 				value: dataItem[0].value
 				}, {
 				coord: toCoord,
 				}]);
 			}
 			}
 			return res;
 };
 let seriesA = []
 seriesA.push(
 	{
 	type: 'lines',
 	zlevel: 1,
 	effect: {
 		show: true,
 		period: 4, //箭头指向速度,值越小速度越快
 		trailLength: 0.3, //特效尾迹长度[0,1]值越大,尾迹越长重
 		symbol: 'pin', //箭头图标
 		symbolSize: 8, //图标大小
 		color: '#2a6fd9'
 	},
 	lineStyle: {
 		normal: {
 		color: '#003262',
 		width: 1,//尾迹线条宽度
 		opacity: .9, //尾迹线条透明度
 		curveness: .3 //尾迹线条曲直度
 		}
 	},
 	data: convertData(chinaDatas)
 	},
 	{
 	type: 'effectScatter',
 	coordinateSystem: 'geo',
 	zlevel: 2,
 	rippleEffect: { // 涟漪特效
 		period: 2, // 动画时间,值越小速度越快
 		brushType: 'fill', // 波纹绘制方式 stroke, fill
 		scale: 6, // 波纹圆环最大限制,值越大波纹越大
 		color: '#003262' // 涟漪的颜色,默认为散点的颜色。
 	},
 	label: {
 		normal: {
 		show: true,
 		color: '#283c64',
 		position: 'top', // 显示位置
 		offset: [0, 0], // 偏移设置
 		formatter: function (params) { // 圆环显示文字
 			return params.data.name
 		},
 		fontSize: 13
 		},
 		emphasis: {
 		show: false
 		}
 	},
 	symbol: 'circle',
 	symbolSize: function (val) {
 		return 1 + val[2] * 5 // 圆环大小
 	},
 	itemStyle: {
 	 color: "#2a6fd9",
   shadowBlur: 4,
   shadowColor: "#2a6fd9",
 	},
 	data: chinaDatas.map(function (dataItem) {
 		return {
 		name: dataItem[0].name,
 		value: chinaGeoCoordMap[dataItem[0].name],
 		itemStyle: {
 			 color: "#2a6fd9",
   shadowBlur: 4,
   shadowColor: "#2a6fd9",
 		}
 		}
 	})
 	},
 	//被攻击点
 	{
 	type: 'scatter',
 	coordinateSystem: 'geo',
 	zlevel: 2,
 	label: {
 		normal: {
 		show: false,
 		position: 'right',
 		color: 'red',
 		formatter: '{b}',
 		textStyle: {
 			color: "red"
 		}
 		},
 		emphasis: {
 		show: true,
 		color: "red"
 		}
 	},
 	symbol: 'pin',
 	symbolSize: 0,
 	data: [{
 		name: '山东',
 		value: chinaGeoCoordMap['山东'].concat([10]),
 	}],
 	}
 );

 let option = {
 	tooltip: {
 		show: true,
 		trigger: 'item',
 		backgroundColor: '#2e65fd',
 		borderColor: '#FFFFCC',
 		showDelay: 0,
 		hideDelay: 0,
 		enterable: true,
 		transitionDuration: 0,
 		extraCssText: 'z-index:100',
 		formatter: function (params, ticket, callback) {
 			console.log(params)
 			// 根据业务自己拓展要显示的内容
 			var res = ''
 			var name = params.name
 			var value1 = params.value[params.seriesIndex + 3] || 0
 			var value2 = params.value[params.seriesIndex + 4] || 0
 			var value3 = params.value[params.seriesIndex + 5] || 0
 			var value4 = params.value[params.seriesIndex + 6] || 0
 			var value5 = params.value[params.seriesIndex + 7] || 0
 			var value6 = params.value[params.seriesIndex + 8] || 0
 			var value7 = params.value[params.seriesIndex + 9] || 0
 			res = "<span style='color:#fff'>" + name + '</span>' +
 					'<br/>' +
 					'<i class="icon icon-xuesheng"></i> 学生:' + value1+
 					'<br/>' +
 					'<i class="icon icon-laoshi_huaban"></i> 老师:'+value2+
 					'<br/>' +
 					'<i class="icon icon-baoanxiehui"></i> 青企协:'+value3+
 					'<br/>' +
 					'<i class="icon icon-rencaizhengce"></i> 青年企业家:'+value4+
 					'<br/>' +
 					'<i class="icon icon-investmentinstitutions"></i> 十强产业:'+value5+
 					'<br/>' +
 					'<i class="icon icon-caozuoyaoqingjiabin"></i> 峰会嘉宾:'+value6+
 					'<br/>' +
 					'<i class="icon icon-rencai"></i> 高端人才:'+value7
 			return res
 		}
 	},
 	  regions: [
   //隐藏南海
   {
   name: "南海诸岛",
   itemStyle: {
    normal: {
    borderColor: "red",
    borderWidth: 20, //设置外层边框
    opacity: 0, // 为 0 时不绘制该图形
    },
   },
   label: {
    show: false, // 隐藏文字
   },
   },
 	 ],
  backgroundColor: "rgba(0, 0, 0, 0.1)",
 	geo: {
 	map: 'china',
 	zoom: 1.2,
 	label: {
 		normal: {
 		color: '#1e2d4c'
 		},
 		emphasis: {
 		show: false
 		}
 	},
 	roam: false, // 是否允许缩放
 	  itemStyle: {
   normal: {
   //地图便框设置
   borderColor: "#003262",
   borderWidth: 11, //设置外层边框
   },
   emphasis: {
   areaColor: "#003262",
   shadowColor: "#003262",
   },
  },
 	itemStyle: {
 		normal: {
 		color: '', // 地图背景色
 		borderColor: '#5ea8ff', // 省市边界线00fcff 516a89
 		borderWidth: 1
 		},
 		emphasis: {
 			color: '#81acff' // 悬浮背景
 		}
 	}
 	},
 	series: seriesA
 }
 }
 </script>

初始化echarts就可以了

this.myEchart = echarts.init(this.$refs.myEchart);
this.myEchart.setOption(option);

到此这篇关于vue+echarts实现中国地图流动效果的文章就介绍到这了,更多相关vue+echarts中国地图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
Vue如何清空对象
Mar 03 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 #Vue.js
vue实现轮播图帧率播放
Jan 26 #Vue.js
vue 组件基础知识总结
Jan 26 #Vue.js
深入了解Vue动态组件和异步组件
Jan 26 #Vue.js
如何在 Vue 表单中处理图片
Jan 26 #Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 #Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 #Vue.js
You might like
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
javascript preload&amp;lazy load
2010/05/13 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python实现下载文件的三种方法
2017/02/09 Python
浅析使用Python搭建http服务器
2019/10/27 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python能自学吗
2020/06/18 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
工地门卫岗位职责
2013/12/30 职场文书
物业保安员岗位职责
2014/03/14 职场文书
素质教育标语
2014/06/27 职场文书
校长创先争优承诺书
2014/08/30 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
工商局个人工作总结
2015/03/03 职场文书
利用python做表格数据处理
2021/04/13 Python
Python自动化测试PO模型封装过程详解
2021/06/22 Python
浅谈Redis中的RDB快照
2021/06/29 Redis
vue+echarts实现多条折线图
2022/03/21 Vue.js