【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 ##查…...
寄宿学校:为自闭症儿童提供全面的教育和关爱
在这个多彩的世界里,每一个生命都值得被温柔以待,每一颗心灵都值得被悉心呵护。然而,自闭症儿童这一特殊群体,他们的世界却常常被误解和忽视。幸运的是,有一种教育模式——寄宿学校,正为这些孩子打开了一扇…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
