用 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/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
