vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

本文主要是介绍vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

一、实现效果
  • 使用echarts实现省市地图绘制
  • 根据数据在地图显示柱状图
  • 根据数据显示数据,涟漪效果
二、实现方法
1、安装echarts插件
npm install echarts --save
2、获取省市json数据

https://datav.aliyun.com/portal/school/atlas/area_selector

通过 阿里旗下的高德地图提供的api ,可以获取到中国各个省份/区级/县级的json数据,但是区级和县级,并没有包含街道和乡镇的数据。

3、本例中data 数据

本文以吉林省地图为例,来实现吉林省下所有市的柱状图显示效果。
你也可以显示中国地图或其他身份地图。原理是一样的哦。

  • 定义一个容器map
<template><div class="map" id="map"></div>
</template>
  • 导入插件及吉林省数据
import * as echarts from "echarts";
import jilin from "./json/jilin.json";
  • 准备数据数据

后面这些数据是通过接口来获取的,本示例写的是静态测试数据

export default {data() {return {//城市坐标数据geoCoordMap: {"长春市": [125.31787, 44.05534],"吉林市": [126.68595, 43.85034],"通化市": [125.76539, 41.68568],"四平市": [124.02419, 43.48220],"白山市": [127.15109, 42.00513],"辽源市": [125.15042, 42.89406],"白城市": [122.83774, 45.07098],"延边朝鲜族自治州": [129.01009, 42.79950],"松原市": [124.55833, 44.94686],},//吉林省下所有市的测试数据testData: [{name: '长春市',value: '80',},{name: '吉林市',value: '70',},{name: '通化市',value: '60',},{name: '四平市',value: '50',},{name: '白山市',value: '90',},{name: '辽源市',value: '30',},{name: '白城市',value: '40',},{name: '延边朝鲜族自治州',value: '30',},{name: '松原市',value: '20',}]};},
}
4、吉林省地图的绘制

geo:地理坐标系组件。用于地图的绘制,支持在地理坐标系上绘制散点图,线集。geo 区域的颜色也可以被 map series 所控制。

ECharts 可以使用 GeoJSON 格式的数据作为地图的轮廓,你可以获取第三方的 GeoJSON 数据注册到 ECharts 中。

geo: [{map: 'jilin',zoom: 1.2, // 默认显示级别itemStyle: { //设置地图板块配置选项normal: {// 图形的描边颜色borderColor: '#55aaff',// 描边线宽。borderWidth: 1,// 柱条的描边类型。borderType: 'solid',areaColor: '#083D7E',},// // 鼠标放上去后,样式改变emphasis: {// 图形的描边颜色borderColor: '#1DF9FC',borderWidth: '2',// 阴影色areaColor: '#3099E2',},},label: {show: false,formatter: '',},},
],

geo属性说明:

  • map:使用 registerMap 注册的地图名称。
  • zoom:当前视角的缩放比例。
  • itemStyle:地图区域的多边形 图形样式。
  • emphasis:高亮状态下的多边形和标签样式。
  • label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
5、柱状图样式

柱状图是利用3个样式层叠实现的。
1、顶部椭圆样式:type: ‘lines’
2、中部矩形样式:type: ‘scatter’
3、底部椭圆样式:type: ‘scatter’

type: 'lines',
zlevel: 5,
effect: {show: false,symbolSize: 5 // 图标大小
},
lineStyle: {width: 20, // 尾迹线条宽度color: 'rgb(22,255,255, .6)',opacity: 1, // 尾迹线条透明度curveness: 0 // 尾迹线条曲直度
},
6、设置柱状底部涟漪特效样式

带有涟漪特效动画的散点(气泡)图。利用动画特效可以将某些想要突出的数据进行视觉突出。

涟漪特效相关配置见下方代码注释。

type: 'effectScatter',
rippleEffect: { //涟漪特效相关配置period: 4, //动画的周期,秒数,值越小速度越快brushType: "stroke", //波纹的绘制方式,可选 'stroke' 和 'fill'scale: 2, //动画中波纹的最大缩放比例,值越大波纹越大 4color: 'rgb(22,255,255, 1)',//涟漪的颜色number: 2//波纹的数量
},
7、数据处理

根据接口数据,及经纬度坐标处理数据。

  • 动态计算柱形图的高度
lineMaxHeight() {const maxValue = Math.max(...this.testData.map(item => item.value))return 0.9 / maxValue
},
  • 柱状体的主干数据
lineData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return {coords: [geoCoordMap[item.name], [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.lineMaxHeight()]]}})
},
  • 柱状体的顶部
scatterTopData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.lineMaxHeight(), item.value]})
},
  • 柱状体的底部
scatterBottomData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return {name: item.name,value: geoCoordMap[item.name]}})
},
8、示例代码已上传,去顶部可下载

附全部代码

<template><div class="map" id="map"></div>
</template><script>
import * as echarts from "echarts";
import jilin from "@/json/jilin.json";
export default {data() {return {geoCoordMap: {"长春市": [125.31787, 44.05534],"吉林市": [126.68595, 43.85034],"通化市": [125.76539, 41.68568],"四平市": [124.02419, 43.48220],"白山市": [127.15109, 42.00513],"辽源市": [125.15042, 42.89406],"白城市": [122.83774, 45.07098],"延边朝鲜族自治州": [129.01009, 42.79950],"松原市": [124.55833, 44.94686],},testData: [{name: '长春市',value: '80',},{name: '吉林市',value: '70',},{name: '通化市',value: '60',},{name: '四平市',value: '50',},{name: '白山市',value: '90',},{name: '辽源市',value: '30',},{name: '白城市',value: '40',},{name: '延边朝鲜族自治州',value: '30',},{name: '松原市',value: '20',}]};},created() {},mounted() {this.drawMap()},methods: {drawMap() {// 判断地图是否渲染let myChart = echarts.getInstanceByDom(document.getElementById("map"))// 如果渲染则清空地图 if (myChart != null) {myChart.dispose()}// 初始化地图myChart = echarts.init(document.getElementById("map"));echarts.registerMap("jilin", jilin)var option = {geo: [{map: 'jilin',zoom: 1.2, // 默认显示级别itemStyle: { //设置地图板块配置选项normal: {// 图形的描边颜色borderColor: '#55aaff',// 描边线宽。borderWidth: 1,// 柱条的描边类型。borderType: 'solid',areaColor: '#083D7E',},// // 鼠标放上去后,样式改变emphasis: {// 图形的描边颜色borderColor: '#1DF9FC',borderWidth: '2',// 阴影色areaColor: '#3099E2',},},label: {show: false,formatter: '',},},],series: [// 柱状体的主干{type: 'lines',zlevel: 5,effect: {show: false,symbolSize: 5 // 图标大小},lineStyle: {width: 20, // 尾迹线条宽度color: 'rgb(22,255,255, .6)',opacity: 1, // 尾迹线条透明度curveness: 0 // 尾迹线条曲直度},silent: true,data: this.lineData()},// 柱状体的顶部{type: 'scatter',coordinateSystem: 'geo',geoIndex: 0,zlevel: 5,label: {show: true,formatter: function (e) {return `数值:${e.data[2]}`},position: "top"},symbol: 'circle',symbolSize: [20, 10],itemStyle: {color: 'rgb(22,255,255, 1)',opacity: 1},silent: true,data: this.scatterTopData()},// 柱状体的底部{type: 'scatter',coordinateSystem: 'geo',geoIndex: 0,zlevel: 4,label: {// 这儿是处理的formatter: '{b}',position: 'bottom',color: '#fff',fontSize: 12,distance: 10,show: true},symbol: 'circle',symbolSize: [20, 10],itemStyle: {// color: '#F7AF21',color: 'rgb(22,255,255, 1)',opacity: 1},silent: true,data: this.scatterBottomData()},// 底部外框{type: 'effectScatter',rippleEffect: { //涟漪特效相关配置period: 4, //动画的周期,秒数,值越小速度越快brushType: "stroke", //波纹的绘制方式,可选 'stroke' 和 'fill'scale: 2, //动画中波纹的最大缩放比例,值越大波纹越大 4color: 'rgb(22,255,255, 1)',//涟漪的颜色number: 2//波纹的数量},coordinateSystem: 'geo',geoIndex: 0,zlevel: 4,label: {show: false},symbol: 'circle',symbolSize: [40, 20],itemStyle: {color: {type: 'radial',x: 0.5,y: 0.5,r: 0.5,colorStops: [{offset: 0, color: 'rgb(22,255,255, 0)' // 0% 处的颜色},{offset: .74, color: 'rgb(22,255,255, 0)' // 100% 处的颜色},{offset: .75, color: 'rgb(22,255,255, 1)' // 100% 处的颜色},{offset: 1, color: 'rgb(22,255,255, 1)' // 100% 处的颜色}],},},data: this.scatterBottomData()}]}myChart.setOption(option)},// 动态计算柱形图的高度lineMaxHeight() {const maxValue = Math.max(...this.testData.map(item => item.value))return 0.9 / maxValue},// 柱状体的主干lineData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return {coords: [geoCoordMap[item.name], [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.lineMaxHeight()]]}})},// 柱状体的顶部scatterTopData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.lineMaxHeight(), item.value]})},// 柱状体的底部scatterBottomData() {let {testData,geoCoordMap} = thisreturn testData.map((item) => {return {name: item.name,value: geoCoordMap[item.name]}})},},
}
</script><style scoped>
.map {width: 800px;height: 600px;position: relative;
}
</style>
9、效果图

在这里插入图片描述

这篇关于vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445070

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求