【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
文章目录
- 基于 Vue3 + ECharts 实现北京市区域地图可视化
- 1、引言
- 2、项目初始化
- 2.1、环境搭建
- 2.2 、安装依赖
- 2.3、项目结构
- 3、地图数据准备
- 3.1、地图 JSON 文件获取(具体的json数据)
- 4、 组件开发
- 4.1、Map 组件的设计思路
- 4.2、基础结构实现
- 4.3、核心数据结构
- 4.4、ECharts 配置封装
- 4.5、数据处理与更新
- 4.6、交互事件处理
- 5、功能扩展与优化
- 5.1、动态连接线效果
- 5.2、 区域数据钻取
- 6、效果
- 总结
- 源码([点这里获取源码和Json数据❤️❤️❤️](https://gitee.com/Serein120658/work-need))
基于 Vue3 + ECharts 实现北京市区域地图可视化
1、引言
在大数据可视化项目中,地图展示是一个常见而重要的需求。本文将介绍如何使用 Vue3 和 ECharts 实现一个交互式的北京市区域地图可视化项目,包含地图数据展示、区域钻取、动态连接线等功能。
2、项目初始化
2.1、环境搭建
首先我们需要初始化一个 Vue3 项目。推荐使用 Vite 来创建:
npm create vite@latest beijing-map -- --template vue
cd beijing-map
npm install
2.2 、安装依赖
项目需要的核心依赖包括:
# 安装 ECharts
npm install echarts# 安装 Element Plus 用于基础UI组件
npm install element-plus# 安装 axios 用于数据请求(如果需要)
npm install axios
2.3、项目结构
推荐的项目结构如下:
src/
├── assets/
│ └── beijingMapJson/ # 地图 JSON 文件
│ ├── beijing.json
│ ├── dongcheng.json
│ └── ...
├── components/
│ └── Map.vue # 地图组件
└── App.vue # 根组件
3、地图数据准备
3.1、地图 JSON 文件获取(具体的json数据)
北京市及各区县的地图 JSON 数据可以通过以下方式获取:
- 从官方网站下载基础地图数据
- 使用地图数据处理工具处理成所需格式
- 将处理好的 JSON 文件放入项目的 assets/beijingMapJson 目录
以北京市地图数据为例,JSON 文件结构应包含:
{"type": "FeatureCollection","features": [{"type": "Feature","properties": {"name": "东城区"},"geometry": {"type": "MultiPolygon","coordinates": [...]}}// ... 其他区域数据]
}
4、 组件开发
4.1、Map 组件的设计思路
Map 组件是本项目的核心,我们采用 Vue3 的 Composition API 来实现。组件主要职责包括:
- 管理地图状态
- 处理地图交互
- 控制数据展示
4.2、基础结构实现
<template><div class="map-container"><div class="header"><span>在线人数:{{ allNumber }}</span><el-button @click="loadBeijing('beijing')">加载北京市地图数据</el-button></div><div class="map-box" ref="mapChart"></div></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import * as echarts from 'echarts'
import { ElButton } from 'element-plus'
</script>
4.3、核心数据结构
组件中的关键数据定义:
// 地图实例引用
const mapChart = ref(null)
let chart = null// 天安门坐标作为中心点
const TIANANMEN_COORDS = [116.397428, 39.909187]// 区域配置数据
const districts = [{ name: '东城区', code: 'dongcheng' },{ name: '西城区', code: 'xicheng' },// ... 其他区域配置
]// 当前地图状态
const currentMapCode = ref('beijing')
const allNumber = ref(0)
4.4、ECharts 配置封装
为了更好地管理 ECharts 的配置,我们将其封装成一个响应式对象:
const mapOption = ref({tooltip: {trigger: 'item',formatter: params => {if (params.seriesType === 'lines') {return `${params.data.fromName} -> ${params.data.toName}`}return `${params.name}<br>在线人数:${Array.isArray(params.value) ? params.value[2] : params.value}`}},visualMap: {show: true,min: 0,max: 20,calculable: true},// ... 其他配置
})
4.5、数据处理与更新
实现数据的动态更新和处理:
// 生成随机数据用于演示
function generateRandomData(code) {const areaData = []const scatterData = []if (code === 'beijing') {allNumber.value = 0beijingCities.value.forEach(city => {const value = Math.round(Math.random() * 10 + 10)allNumber.value += valueareaData.push({name: city.name,value: value})scatterData.push({name: city.name,value: [...city.cp, value]})})}return { areaData, scatterData }
}// 地图更新函数
async function updateMap(code) {const mapData = await loadDistrictMap(code)if (!mapData) returncurrentMapCode.value = codeecharts.registerMap(code, mapData)// 更新地图配置...chart.setOption(mapOption.value, true)
}
4.6、交互事件处理
实现地图的交互功能:
function handleMapClick(params) {const district = districts.find(d => d.name === params.name)if (district) {updateMap(district.code)}
}// 初始化地图和事件监听
function initMap() {if (!mapChart.value) returnchart = echarts.init(mapChart.value)updateMap('beijing')chart.on('click', handleMapClick)window.addEventListener('resize', () => chart.resize())
}
5、功能扩展与优化
5.1、动态连接线效果
实现从天安门到各区的动态连接线:
function generateLinesData() {return beijingCities.value.map(city => ({fromName: '天安门',toName: city.name,coords: [TIANANMEN_COORDS, city.cp],value: getRandomValue() // 可以根据实际数据设置}))
}
5.2、 区域数据钻取
实现点击区域查看详细数据的功能:
async function loadDistrictMap(code) {if (code === 'beijing') {return beijing}try {const districtData = await import(`../assets/beijingMapJson/${code}.json`)return districtData.default} catch (error) {console.error(`加载${code}地图数据失败:`, error)return null}
}
6、效果
北京市各个区

点击各个区显示乡镇(这里点击昌平)

总结
通过本文的实践,我们实现了一个功能完整的北京市区域地图可视化项目。该项目不仅展示了基本的地图数据,还实现了区域钻取、动态连接线等高级功能。在实际应用中,可以基于此框架继续扩展更多功能,如实时数据更新、多维度数据展示等。
希望这个实例能够帮助你更好地理解和实现地图可视化项目。完整的代码已经放在本文中,你可以直接参考使用。如果遇到问题,欢迎讨论交流。
源码(点这里获取源码和Json数据❤️❤️❤️)
相关文章:
【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
文章目录 基于 Vue3 ECharts 实现北京市区域地图可视化1、引言2、项目初始化2.1、环境搭建2.2 、安装依赖2.3、项目结构 3、地图数据准备3.1、地图 JSON 文件获取(具体的json数据) 4、 组件开发4.1、Map 组件的设计思路4.2、基础结构实现4.3、核心数据结…...
【IC】什么是min period check
在 Synopsys Primetime 工具中可以检查.lib 文件中时钟输入的最小周期。想象这样一个场景,有一个设计 A,它有一个名为 clk 的时钟,并且该设计的 clk 周期被设定为一个值,比如 2 纳秒,即 500MHz。假设我们在进行静态时序…...
MyBatis入门之一对多关联关系(示例)
【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书 …...
【Git 】Windows 系统下 Git 文件名大小写不敏感
背景 在 Windows 系统上,Git 对文件名大小写的不敏感性问题确实存在。由于 Windows 文件系统(如 NTFS )在默认情况下不区分文件名大小写所导致的。 原因分析 文件系统差异 Windows文件系统(如 NTFS)默认不区分文件名…...
【算法系列-二叉树】层序遍历
【算法系列-二叉树】层序遍历 文章目录 【算法系列-二叉树】层序遍历1. 算法分析🛸2. 相似题型🎯2.1 二叉树的层序遍历II(LeetCode 107)2.2 二叉树的右视图(LeetCode 199)2.3 二叉树的层平均值(LeetCode 637)2.4 N叉树的层序遍历(LeetCode 429)2.5 在每个…...
我的世界方块改进版
引子 之前文章的磁性方块,通过3D打印实现,也批量打印了一些,下图就是一个小树 使用过程中,发现磁力感觉不紧,所以想改进一版。 正文 之前的结构如下:: 如果出现相邻的空隙间的磁铁相互作用&am…...
博客搭建之路:hexo增加搜索功能
文章目录 hexo增加搜索功能本地搜索弊端algolia搜索 hexo增加搜索功能 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 作为一个博客,没有搜索功能,如何在大批文章中找到自己想要的,那在hexo中如何增加搜索功能呢? search:path: sea…...
2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)
前言 春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸…...
MybatisPlus入门(一)MybatisPlus简介
一、MyBatis简介 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 - 官网:https://mybatis.plus/ https://mp.baomidou.com/ MyBatisPlus特性: - 无侵入:只做增强…...
QoS学习笔记
QoS业务分类 基于 DiffServ 服务模型的 QoS 业务可以分为以下几大类: 流分类和标记(Traffic classification and marking):要实现差分服务,需要首先将数据包分为不同的类别或者设置为不同的优先级。将数据包分为不同…...
图(邻接矩阵)知识大杂烩!!(邻接矩阵结构,深搜,广搜,prim算法,kruskal算法,Dijkstra算法,拓扑排序)(学会一文让你彻底搞懂!!)
小伙伴们大家好,今天给大家带来图(邻接矩阵)的各种知识,让你看完此文章彻底学会邻接矩阵的相关问题。 1.邻接矩阵表示方法 1.1知识讲解 我们用一个二维数组arr来表示图。若图为有向图,其中arr【i】【j】w表示i号点和…...
Prometheus自定义PostgreSQL监控指标
本文我们将介绍如何在Prometheus中创建自定义PostgreSQL指标。默认情况下由postgres_export运行的查询可能不能满足用户需求,但我们可以创建自定义查询,并要求postgres_exporter公开自定义查询的结果。postgres_exporter最近被移到了Prometheus Communit…...
400行程序写一个实时操作系统(十六):操作系统中的调度策略
前言 在前面我们完成了Sparrow的临界区的代码,使用临界区,能够解决常见的并发问题,现在该完善我们的调度算法了。 调度算法在操作系统领域常常是热门的话题。不同的用途将会使用不同的调度策略。在本节,笔者将为大家介绍一些操作…...
从安灯系统看汽车零部件工厂的智能制造转型
在当今快速发展的制造业领域,汽车零部件工厂正面临着日益激烈的市场竞争和不断提高的客户需求。为了在竞争中脱颖而出,实现可持续发展,许多汽车零部件工厂纷纷踏上智能制造转型之路。而安灯系统作为一种重要的生产管理工具,在这场…...
SwiftUI(三)- 渐变、实心形状和视图背景
引言 在现代的应用的UI设计中,渐变和形状背景为界面带来了丰富的层次与视觉效果,而SwiftUI提供了一系列简单且强大的API,可以轻松实现这些效果。在这篇文章中,我们将介绍SwiftUI中的渐变、实心形状和视图背景的基础用法ÿ…...
RK3568-ota升级
ota升级 OTA(Over-the-Air)即空间下载技术。 OTA 升级是 Android 系统提供的标准软件升级方式。它功能强大,可以无损失升级系统,主要通过网络,例如 WIFI、3G/4G 自动下载 OTA 升级包、自动升级,也支持通过…...
GR-ConvNet代码详解
GR-ConvNet代码详解 文章目录 GR-ConvNet代码详解前言一、utils1.dataset_processing1.image.py1.Iamge类2.DepthImage类3.WidthImage类 2.grasp.py1. _gr_text_to_no()方法2.GraspRectangles类3.GraspRectangle类3.Grasp类4.detect_grasps方法 3.generate_cornell_depth.py4.e…...
Excel自带傅里叶分析数据处理——归一化处理
在Excel工具中,默认情况下数据处理---傅里叶分析通常不进行归一化处理,需要用户手动进行归一化处理。 (1)傅里叶变换的原理 傅里叶变换将时域信号转换为频域信号,输出的是复数形式的频率分量,包含了幅值和…...
Centos7.6版本安装mysql详细步骤
操作步骤: 1.下载Linux版本Mysql并上传至linux系统中 2.解压mysql并查询系统中是否有相关软件存在以及配置mysql,启动mysql tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz rpm -qa|grep mysql ##查…...
寄宿学校:为自闭症儿童提供全面的教育和关爱
在这个多彩的世界里,每一个生命都值得被温柔以待,每一颗心灵都值得被悉心呵护。然而,自闭症儿童这一特殊群体,他们的世界却常常被误解和忽视。幸运的是,有一种教育模式——寄宿学校,正为这些孩子打开了一扇…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
