用 echarts 开发地图、点击展示自定义信息框
1、下载所需地市的json 链接:DataV.GeoAtlas地理小工具系列
在右侧输入需要的名称,然后下载json文件到本地

2、在html 中准备容器,并设置宽高
<div id="mapContent">
<div ref="mapChart" style="width:100%;height:100%;margin-bottom: 0" />
</div>
#mapContent {
width: 100%;
height: 100%;
}
3、导入echarts 和 json 文件
import * as echarts from 'echarts'
import json_150000 from '@/static/neimenggu/county/150000.json'
4、处理数据
//data 数据
data() {
return {
charts: null,
mapjson: json_150000,
codeToJson: {
'150000': json_150000
},
mapOptions:{},
cityName: {
呼和浩特市: {
value: '',
jcz: '',
kc: '',
fwz: ''
},
...................
},
cityCodeAndName:{
'150100000000' :'呼和浩特市',
'150700000000' :'呼伦贝尔市',
'150200000000' :'包头市',
...................................
}
}
5、初始化方法
initEcharts(areaCode) {
const name = 'json_' + areaCode
const cityName = this.cityName
const mapjson = this.codeToJson[areaCode]
if (this.charts) {
this.charts.clear()
} else {
this.charts = echarts.init(this.$refs.mapChart)
}
const top = 28
const zoom = 1.2 //地图缩放层级(控制地图大小)
const option = {
backgroundColor: 'rgba(0,0,0,0)',
tooltip: {
show: false
},
legend: {
show: false
},
grid: {
height: '100%'
},
geo: {
map: name,
roam: false,
selectedMode: false, // 是否允许选中多个区域
zoom: zoom,
top: top,
show: false
},
series: [
{
name: 'MAP',
type: 'map',
map: name,
label: {
show: false,
color: '#fff'
},
showLegendSymbol: false,
data: [],
selectedMode: 'single', // 是否允许选中多个区域
zoom: zoom,
geoIndex: 1,
top: top,
tooltip: {
show: true,
formatter: function(params) {
return params.name + '(' + cityName[params.name].value + ')'
}, //内容
backgroundColor: 'rgba(0,0,0,.6)', //提示框样式
borderColor: 'rgba(147, 235, 248, .8)',
textStyle: {
color: '#FFF'
},
triggerOn: 'click'
},
emphasis: {
//划过区域时,样式设置
label: {
show: false //是否显示区域名称(在面积中)
},
itemStyle: {
areaColor: '#389BB7', //区域的面积颜色
borderWidth: 1 //区域边框
}
},
select: {
disabled: true
},
//区域样式设置
itemStyle: {
borderColor: '#2084bc',
borderWidth: 2,
areaColor: {
type: 'radial',
x: 0.5,
y: 0.5,
r: 0.8,
colorStops: [
{
offset: 0,
color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
},
{
offset: 1,
color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
}
],
globalCoord: false // 缺为 false
},
shadowOffsetX: -2,
shadowOffsetY: 2,
shadowBlur: 10
}
}
]
}
this.mapOptions = option
echarts.registerMap(name, mapjson)
//处理数据
const jsonData = this.getGeoCoordMap(mapjson)
this.mapOptions.series[0].data = jsonData
const that = this
//给区域添加点击事件
this.charts.on('click', function(params) {
//先移除上个标签
const popDiv = document.getElementById('popup')
if (popDiv) {
document.getElementById('mapContent').removeChild(popDiv)
}
// 自定义弹框
var popup = document.createElement('div')
popup.id = 'popup'
popup.style.position = 'absolute'
popup.style.left = params.event.event.clientX - 90 + 'px'
popup.style.top = params.event.offsetY - 120 + 'px'
popup.style.backgroundColor = '#22312f'
popup.style.zIndex = 999
popup.style.padding = '0 20px'
popup.style.borderRadius = '10px'
popup.innerHTML =
'<div id="nmgInfoWindow">' +
'<div class="title">' +
params.data.name +
'详情<i class="el-icon-close closebt" id = "closeBtn"></i></div>' +
'<div class="items"> <span style="color:#62b2bc;">项目一</span><span>' +
'<span style="color:#62b2bc;">' +
cityName[params.data.name].jcz +
'</span>' +
'<i class="el-icon-arrow-right toDetail" style="color:#62b2bc;"></i></span>' +
'</div>' +
'<div class="items"> <span style="color:#62b2bc;">项目二</span><span>' +
'<span style="color:#62b2bc;">' +
cityName[params.data.name].kc +
'</span>' +
'<i class="el-icon-arrow-right toDetail" style="color:#62b2bc;"></i></span>' +
'</div>' +
'<div class="items"> <span style="color:#62b2bc;">项目三</span><span>' +
'<span style="color:#62b2bc;">' +
cityName[params.data.name].fwz +
'</span>' +
'<i class="el-icon-arrow-right toDetail " style="color:#62b2bc;"></i></span>' +
'</div>' +
'</div>'
//添加到页面上
document.getElementById('mapContent').appendChild(popup)
//给自定义弹框中添加关闭事件
const closeButton = document.querySelector('#closeBtn')
closeButton.addEventListener('click', function() {
const popDiv = document.getElementById('popup')
if (popDiv) {
document.getElementById('mapContent').removeChild(popDiv)
}
})
//给自定义弹框中的按钮跳转事件
const detailButton = document.querySelectorAll('.toDetail')
detailButton.forEach((item, index) => {
item.addEventListener('click', function() {
console.log('点击事件',that)
})
})
})
this.charts.setOption(option)
},
getGeoCoordMap(mapjson) {
const mapFeatures = mapjson.features
const cityCenter = {}
mapFeatures.map((item) => {
cityCenter[item.properties.name] = item.properties.centroid || item.properties.center || []
})
const newData = []
mapFeatures.map((item) => {
if (cityCenter[item.properties.name]) {
newData.push({
name: item.properties.name,
value: cityCenter[item.properties.name],
adcode: item.properties.adcode
})
}
})
return newData
}
6、结果


相关文章:
用 echarts 开发地图、点击展示自定义信息框
1、下载所需地市的json 链接:DataV.GeoAtlas地理小工具系列 在右侧输入需要的名称,然后下载json文件到本地 2、在html 中准备容器,并设置宽高 <div id"mapContent"> <div ref"mapChart" style"width:10…...
Android 应用兼容性变更调试
引言 本文将介绍如何调试和解决这些兼容性问题,并记录调试过程中实际操作的步骤和方法。在Android应用开发中,随着Android系统版本的不断更新,应用的兼容性问题变得越来越复杂。 推荐:《Android系统开发中高级定制专栏导读》08-03 16:04:53.518 6555 6555 D Compatibili…...
76 多态
多态(polymorphism)是指基类的同一个方法在不同派生类对象中具有不同的表现和行为。 派生类继承了基类的行为和属性之后,还会增加某些特定的行为和属性,同时还可能会对继承来的某些行为进行一定的改变,这都是多态的表现…...
数据采集工具之Canal
本文主要介绍canal采集mysql数据的tcp、datahub(kafka)模式如何实现 1、下载canal https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/canal.deployer-1.1.5-SNAPSHOT.tar.gz canal的原理类似于mysql的主从复制,canal模拟的是从节点拉取主节点的binlog数…...
【后端】消息中间件小册
1.RabbitMQ RabbitMQ 是一个流行的消息中间件系统,采用 AMQP(高级消息队列协议)来管理消息的传递。它的工作原理涉及多个组件和机制来确保消息的可靠性和完整性。以下是 RabbitMQ 的基本工作原理以及如何保证消息不丢失的机制: R…...
【进阶篇-Day14:JAVA中IO流之转换流、序列化流、打印流、Properties集合的介绍】
目录 1、转换流1.1 转换流分类:1.2 转换流的作用(1)按照指定的字符编码读写操作:(2)将字节流转换为字符流进行操作: 2、序列化流2.1 序列化的基本使用:2.2 序列化的操作流程…...
【Material-UI】Checkbox 组件中的 Label Placement 设置详解
文章目录 一、Checkbox 组件简介1. 组件概述2. labelPlacement 属性 二、labelPlacement 属性的使用方法三、各标签位置的效果与应用场景1. Top(顶部)2. Start(左侧)3. Bottom(底部)4. End(右侧…...
XJTUSE-离散数学-集合
基本概念 集合的包含与相等,如子集幂集:以A的所有子集组成的集合称为A的幂集AB <> 集合的基本运算 基本运算证明会考 交运算并运算补运算差运算:A \ B 环和运算:环积运算: 集合的其他表示方法 文图表示法 …...
安徽省消防设施操作员题库
1.()是做人的基本准则,也是社会道德和职业道德的一项基本规范。 A.诚实守信(正确答案) B.爱岗敬业 C.以人为本 D.钻研业务 2.()是指为了追求完美,坚持工匠精神,在工作中不放松对自己的要求。 A.爱岗敬业 B.精益求精(正确答案) C.勤奋刻苦 D.专…...
Singularity容器安装与使用
Singularity容器技术 docker的缺点: 资源限制问题:Slurm利用cgroups实现资源分配,Docker通过ocker daemon无法实现。 权限问题:Docker daemon使用 root用户启动,HPC场录期望使用普通用户运行容器。 singuiarily主要是适合HPC中的普通用户,…...
Linux 文件、重定向、缓冲区
个人主页:仍有未知等待探索-CSDN博客 专题分栏: Linux 目录 一、文件 1、文件的理解(浅层) 1.文件是什么? 2.文件操作的前提 3.文件的存储 4.一个进程可以打开多个文件吗?如果可以怎么管理的…...
WEB漏洞-SQL注入之MYSQL注入
跨库注入的原理:针对同一IP下的不同域名 同一服务器下 网站A对应数据库A 网站B对应数据库B 网站C对应数据库C 如果某网站的存在注入点,注入点的权限恰好是root权限,也就是最高权限,那么可以通过跨库注入获取其他网站的数据库…...
mysql 查询 from a, b 和 a left join b 有什么区别
在MySQL中,from a, b 和 a left join b 有显著的区别,主要体现在查询结果和使用场景上。 基本语法与返回结果: from a, b:这种写法实际上是将两个表作为一个整体来处理,即假设这两个表是同一个表。因此,它…...
禁用ssh 22端口
在Linux系统中,要关闭SSH端口,可以通过修改SSH配置文件或防火墙规则来实现。 方法一:修改SSH配置文件 1. 使用root用户登录Linux系统。 2. 打开SSH配置文件,可以使用任何文本编辑器,如vi或nano。在大多数Linux发行版上…...
C++基础编程的学习3
nullptr关键字 在C11之前,空指针通常用NULL或0表示。然而,这些表示方法存在类型安全问题。C11引入了nullptr关键字,它提供了一个明确的、类型安全的空指针值。 Lambda表达式 Lambda表达式是C11引入的一种便捷的匿名函数定义方式。当Lambda…...
Java中的Optional类:解锁优雅编程的秘密
引言 在Java开发的世界里,空指针异常(NullPointerException)一直是让无数程序员头疼的问题之一。它不仅打断了程序的正常执行流程,还可能隐藏在复杂的业务逻辑之中,难以定位。自Java 8起,一个新的类——Op…...
聆思CSK6大模型开发板语音控制风扇(上)
前言 本文介绍如何实现大模型语音交互对风扇实现开关控制,示例使用的硬件是聆思CSK6大模型开发板,大模型接的是星火大模型。本文将先详细介绍大模型云端从获取交互语音到下发控制指令的全过程,包括整合上下文、配置提示词、语义意图分类、提取…...
代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II、123. 买卖股票的最佳时机III
一、121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com)——121. 买卖股票的最佳时机 视频讲解:动态规划之 LeetCode:121.买卖股票的最…...
延时队列与redis and rabbitmq
延时队列是什么 延时队列(Delay Queue)是一种特殊的消息队列,它允许你在添加消息时设置一个延时时间,消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用,常用于处理需要在指定时间后执行的任务&am…...
数据结构--单链
#include "link.h" plink get_head() { plink pmalloc(sizeof(Link)); if(pNULL) { printf("申情节点失败\n"); return NULL; } p->len0; p->nextNULL; return p; } void head_insert(plink L,int a) {…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
