当前位置: 首页 > news >正文

Vue + ECharts 实现山东地图展示与交互

这篇文章中,我将逐步介绍如何使用 Vue 和 ECharts 实现一个互动式的地图展示组件,其中支持返回上一层地图、点击查看不同城市的详细信息,以及根据数据动态展示不同的统计信息。

效果图:玩转山东地图:用Echarts打造交互式数据可视化--好玩篇_excharts 山东地图-CSDN博客

我将分为以下几部分进行详细讲解:

  1. 项目结构与组件基本框架
  2. ECharts 的基本配置与地图初始化
  3. 动态加载不同地区地图数据
  4. 地图交互:点击事件与返回上一层功能
  5. 自定义 Tooltip 和图标
  6. 样式与布局调整

1. 项目结构与组件基本框架

首先,定义了一个 Vue 组件 MapComponent,它将负责渲染地图、处理用户交互,并展示传递给它的数据。

<template><div class="map_style"><!-- 返回按钮,只有在有历史记录时显示 --><Buttontype="primary"@click="goBack"class="go_back_index"v-if="mapStack.length > 1">返回</Button><!-- 地图容器 --><divref="chart"style="height: 100%; width: 100%"class="chart-container"></div></div>
</template>

在模板中,主要有两个部分:

  • 返回按钮: 当 mapStack 中有多个历史记录时,返回按钮会显示,用于返回上一层地图。
  • 地图容器: 这是 ECharts 渲染地图的地方,通过 ref="chart" 获取容器 DOM。

2. ECharts 的基本配置与地图初始化

mounted 生命周期钩子中,初始化了 ECharts 图表并注册了地图数据:

mounted () {this.$nextTick(() => {this.initChart();})window.addEventListener('resize', this.handleResize); // 窗口变化时调整图表大小
}

initChart 方法中,注册了山东省的地图数据并初始化了 ECharts 实例:

initChart () {// 注册山东省地图this.$echarts.registerMap('shandong', this.mapData['山东省']);// 初始化 ECharts 实例this.chart = this.$echarts.init(this.$refs.chart);// 监听地图点击事件,点击后进入下一级地图this.chart.on('click', ({ name }) => {if (this.mapData[name] && name !== this.currentCity) {// 进入下一级地图this.mapStack.push(name);this.setMapData(name);}});// 设置地图选项this.setMapData(this.currentCity);
}

3. 动态加载不同地区地图数据

地图数据在 mapData 中以城市名称为键,地图 JSON 文件为值。每个城市的数据可以通过 require 动态加载。例如:

mapData: {'山东省': require('./shangdong.json'),'青岛市': require('../json/青岛市.json'),'济南市': require('../json/济南市.json'),...
}

4. 地图交互:点击事件与返回上一层功能

当点击地图中的某个城市时,会更新地图为该城市的地图数据,并将当前城市名称加入到 mapStack 中以实现返回功能。goBack 方法会弹出当前城市并加载上一层城市的地图数据。

goBack () {if (this.mapStack.length > 1) {this.mapStack.pop(); // 弹出当前城市this.setMapData(this.mapStack[this.mapStack.length - 1]); // 设置上一城市的数据}
}

5. 自定义 Tooltip 和图标

地图上的每个城市展示的数据通过 tooltipFormatter 方法进行自定义格式化,显示每个城市的相关信息,如总用户数、平均积分、平均时长等。

tooltipFormatter (params) {const marker = `<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:#284979;"></span>`;const cityName = `<h3>${(params.data && params.data.name) || params.name || '暂无单位'}</h3>`;const totalUser = marker + '人数:' + (params.data && params.data.totalUser || 0) + '<br />';const score = marker + '平均积分:' + (params.data && params.data.score || 0) + '<br />';const duration = marker + '平均时长:' + (params.data && params.data.duration || 0);return cityName + totalUser + score + duration ;
}

这段代码通过判断 params.data 是否存在,动态生成显示城市信息的 HTML 格式。

6. 样式与布局调整

对于地图组件的样式,使用了 scoped 样式进行隔离,确保组件的样式不会污染到其他部分:

.map_style {position: relative;height: 100%;width: 100%;
}.go_back_index {position: absolute;top: 10px;left: 10px;z-index:999;
}.chart-container {border-radius: 10px;overflow: hidden;
}
  • map_style 类定义了组件的外部容器样式,确保其占满父容器。
  • go_back_index 类定义了返回按钮的位置,确保它在页面的左上角,且 z-index 很高,以便始终显示在其他内容之上。
  • chart-container 类定义了地图容器的外观,给它设置了圆角和隐藏溢出部分的效果。
 总结:

文章介绍了如何使用 Vue 和 ECharts 实现一个交互式地图组件。通过以下几个步骤实现了地图的基本功能:

  1. 初始化 ECharts 和地图数据;
  2. 支持返回上一层地图的功能;
  3. 根据点击的城市动态加载该城市的地图和数据;
  4. 自定义地图的 Tooltip,展示城市的相关统计信息;
  5. 对组件进行了样式和布局的优化,确保地图组件可以灵活适应不同的屏幕尺寸。

通过组件,可以灵活地展示不同城市或地区的数据,并允许用户点击进入查看更详细的统计信息。

相关文章:

Vue + ECharts 实现山东地图展示与交互

这篇文章中&#xff0c;我将逐步介绍如何使用 Vue 和 ECharts 实现一个互动式的地图展示组件&#xff0c;其中支持返回上一层地图、点击查看不同城市的详细信息&#xff0c;以及根据数据动态展示不同的统计信息。 效果图&#xff1a;玩转山东地图&#xff1a;用Echarts打造交互…...

【Verilog】UDP用户原语

User-defined primitives 概述基本语法组合逻辑的UDP时序逻辑的UDPUDP 符号表 Verilog HDL&#xff08;简称 Verilog &#xff09;是一种硬件描述语言&#xff0c;用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog 不仅定义了语法&…...

问题小记-达梦数据库报错“字符串转换出错”处理

最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题&#xff0c;这个问题主要是涉及到一条sql语句的执行&#xff0c;在此分享下这个报错的处理过程。 问题表现为&#xff1a;一样的表结构和数据&#xff0c;执行相同的SQL&#xff0c;在Oracle数据库中执行正常&…...

MyBatis入门的详细应用实例

目录 MyBatis第一章&#xff1a;代理Dao方式的CRUD操作1. 代理Dao方式的增删改查 第二章&#xff1a;MyBatis参数详解1. parameterType2. resultType 第三章&#xff1a;SqlMapConfig.xml配置文件1. 定义properties标签的方式管理数据库的信息2. 类型别名定义 MyBatis 第一章&…...

Sequelize ORM sql 语句工具

Sequelize ORM sql 语句工具 初始化配置 Sequelize orm 配置文章落日沉溺于海 在命令行中全局安装 npm i -g sequelize-clisequelize 执行需要匹配 mysql2 对应的依赖&#xff08;安装 mysql2&#xff09; npm i sequelize mysql2初始化项目 sequelize init熟悉初始化项目后…...

增强LabVIEW与PLC通信稳定性

在工业自动化系统中&#xff0c;上位机与PLC之间的通信稳定性至关重要&#xff0c;尤其是在数据采集和控制任务的实时性要求较高的场景中。LabVIEW作为常用的上位机开发平台&#xff0c;通过合理优化通信协议、硬件接口、数据传输方式以及系统容错机制&#xff0c;可以大大提升…...

UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏

UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作&#xff0c;请确认防火墙和网络设置允许UDP通信&#xff0c;并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...

NK细胞杀伐功能如何实现?

在人体的免疫系统中&#xff0c;自然杀伐细胞&#xff08;Natural Killer Cells&#xff0c;简称NK细胞&#xff09;是一类完全自然的免疫激活力量。它们为人体提供了快速反应能力&#xff0c;不依赖类元的特定识别力&#xff0c;但能直接寻找和毁灭毒病感染细胞和肿瘤细胞。那…...

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…...

PC寄存器(Program Counter Register)jvm

在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…...

预览和下载 (pc和微信小程序)

1.微信小程序 预览pdf 或者 图片等 //utils.js 文件//通过接口返回文件链接 打开文档 export default function previewFile({ downLinkUrl, tempFilePath }) {let url "https://" downLinkUrl.replace("http://", "").replace("https:…...

使用 DeepSpeed 微调 OPT 基础语言模型

文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…...

BSM和BMS什么区别?

BSM BSM&#xff08;Battery System Manager&#xff09;是指用于管理和控制电动车辆的电池系统的设备&#xff0c;其功能包括监测电池状态、控制充放电过程、保护电池安全等。 BMS BMS&#xff08;Battery Management System&#xff09;是指用于监测、控制和保护电池组的设…...

使用Maven打包javaagent.jar

1、简介 javaagent 是 Java1.5 之后引入的新特性&#xff0c;其主要作用是在class被加载之前对其拦截&#xff0c;以插入我们的字节码。 java1.5 之前使用的是JVMTI&#xff08;jvm tool interface&#xff09;技术来实现对class的拦截&#xff0c;不过这个是用 C 编写的&#…...

R语言混合模型回归GBTM群组轨迹模型绘图可视化研究

全文链接&#xff1a;https://tecdat.cn/?p38581 在回归分析的广袤领域中&#xff0c;面对具有多条未知函数线的复杂数据时&#xff0c;传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生&#xff0c;其在处理此类复杂情境时展现出独特的优势与潜力&#xff08…...

【毕业设计】A079-基于Java的影院订票系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

Vue.js前端框架教程11:Vue监听器watch和watchEffect

文章目录 监听器&#xff08;watchers&#xff09;基本用法deep: trueimmediate: true总结 watchEffect基本用法自动追踪依赖停止监听与 watch 的对比性能优化总结 监听器&#xff08;watchers&#xff09; 在 Vue 中&#xff0c;监听器&#xff08;watchers&#xff09;是一种…...

疾风大模型气象系统:精准预报,引领未来

精准预报,引领未来 在当今快速变化的世界中,天气预报已成为日常生活和社会运行中不可或缺的一部分。从规划日常出行到防范极端天气影响,高精准的气象服务正在重新定义我们的生活方式。而在这一领域,疾风大模型气象系统以其卓越的技术实力和领先的预测能力,正引领气象服务…...

U9应收单拉单生成时找不到退货单

财务说做应收单时抓不到一张退货单。2022年单据。这样的单据让人联想翩翩&#xff0c;胡思乱想。怎么复杂怎么想&#xff0c;钻了牛角尖。分析了1天也没有结果。不知道系统的逻辑&#xff0c;只能用猜想的形式去分析。 问过顾问之后&#xff0c;原来是单据类型错了。从而知道了…...

设计模式--单例模式【创建型模式】

设计模式的分类 我们都知道有 23 种设计模式&#xff0c;这 23 种设计模式可分为如下三类&#xff1a; 创建型模式&#xff08;5 种&#xff09;&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff08;7 种&#xff09;&#xff1…...

手把手教你用Python实现熵权PCA:从数据清洗到可视化,一个案例全讲透

用Python实战熵权PCA&#xff1a;电商商品竞争力分析全流程解析 在电商平台的海量商品中&#xff0c;如何快速识别出真正具有竞争力的产品&#xff1f;传统的人工筛选方式不仅效率低下&#xff0c;还容易受到主观偏见的影响。本文将带你用Python实现一个完整的熵权PCA分析流程&…...

二手车价格预测:特征工程比调参重要10倍!我的天池赛从800分降到490分的实战复盘

二手车价格预测实战&#xff1a;如何通过特征工程将MAE从800降到490 二手车市场向来以信息不对称为特点&#xff0c;价格波动大、影响因素复杂。对于数据科学家来说&#xff0c;准确预测二手车价格不仅是一个有趣的机器学习挑战&#xff0c;更是一个极具商业价值的实际问题。在…...

GLM-4.1V-9B-Base行业落地:建筑图纸局部区域语义理解与标注建议

GLM-4.1V-9B-Base行业落地&#xff1a;建筑图纸局部区域语义理解与标注建议 1. 建筑行业的AI视觉理解需求 建筑设计和施工过程中&#xff0c;图纸理解与标注是一项耗时且容易出错的工作。传统方式需要经验丰富的工程师手动识别图纸中的各个元素&#xff0c;不仅效率低下&…...

Linux进程,存储,软件,日志004

目录一、进程管理二、磁盘与存储管理三、软件包管理四、系统日志管理一、进程管理1.1 进程概念与状态进程定义&#xff1a;进程是正在执行的程序实例&#xff0c;包含程序代码、数据和系统资源。进程状态转换&#xff1a;● 运行(RUNNING)&#xff1a;进程正在CPU上执行● 就绪…...

PyCharm 2025.2 离线安装与配置全攻略:绕过登录,直接使用完整汉化版

PyCharm 2025.2 离线安装与配置全攻略&#xff1a;企业级免登录解决方案 在企业开发环境中&#xff0c;Python开发者常常面临网络限制、账号管理繁琐等问题。PyCharm作为最受欢迎的Python IDE之一&#xff0c;其官方版本需要联网激活和登录JetBrains账户&#xff0c;这对内网开…...

逆向实战:用Smali语法修改APK逻辑,实现一个简单的功能破解(附工具与源码)

逆向工程实战&#xff1a;用Smali语法解锁APK功能的全流程指南 在Android逆向工程领域&#xff0c;掌握Smali语法就像获得了一把打开APK内部逻辑的万能钥匙。不同于那些停留在理论层面的教程&#xff0c;本文将带你深入一个真实的逆向场景——如何通过修改Smali代码来解锁某个演…...

从LAS文件到点云地图:手把手教你用LIO-SAM处理武大WHU-TLS隧道数据集

从LAS文件到点云地图&#xff1a;LIO-SAM处理WHU-TLS隧道数据集的实战指南 隧道场景的点云数据处理一直是SLAM领域的技术难点。武汉大学发布的WHU-TLS Tunnel数据集作为全球最大的地面激光扫描基准数据集之一&#xff0c;其隧道环境数据具有典型的封闭空间特征——长条形结构、…...

猫抓插件:突破网页资源限制的媒体捕获解决方案

猫抓插件&#xff1a;突破网页资源限制的媒体捕获解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代&#xff0c;我们每天浏览的网页中蕴含着丰富的视频、音频和图片资源。…...

Ubuntu 24.04 时间同步踩坑记:从 hwclock 到 timedatectl 的演进与实战

Ubuntu 24.04 时间同步踩坑记&#xff1a;从 hwclock 到 timedatectl 的演进与实战 记得第一次在 Ubuntu 24.04 上看到系统时间与 Windows 11 相差整整 8 小时时&#xff0c;我下意识地敲下了熟悉的 hwclock 命令——这个陪伴我多年的老伙计。然而终端冰冷的报错提示让我意识到…...

保姆级教程:用YOLOv11+PyQt5打造你的专属天气识别桌面应用(附完整源码)

从零构建基于YOLOv11的智能天气识别桌面应用 窗外阴云密布&#xff0c;你是否曾好奇此刻的天气状况究竟如何&#xff1f;现代计算机视觉技术让机器也能像人类一样"看懂"天气。本文将带你完整实现一个能识别11种天气类型的桌面应用&#xff0c;从模型加载到界面交互&a…...