vue使用echarts中国地图

需求:Vue3 + vite +TS 项目内使用 Echarts 5 绘制中国地图。鼠标悬浮省份上面显示指定的数据,地图支持缩放和拖拽的功能,页面放大缩小支持自适应,window.addEventListener(‘resize’, resize); 添加防抖动函数debounce。
在这里插入图片描述

一、安装 Echarts

npm install echarts --save

安装成功后如下:

在这里插入图片描述

二、下载地图的 json 数据

免费的文件下载地址:

http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=30.332329214580188&lng=106.72278672066881&zoom=3.5
在这里插入图片描述

三、具体代码如下

1,chinaMap.vue组件如下:

<template><div class="leftCard"><div id="chinaMap" ref="chinaMap"></div></div>
</template><script setup lang="ts" name="ChinaMap">
import { reactive, onMounted, onBeforeUnmount, nextTick, ref, watch } from 'vue';
import * as echarts from 'echarts';
import china from "./china.json";  //中国地图
import { debounce } from 'lodash-es';
const chinaMap = ref()
var myChart = {} as any
const resize = debounce(() => myChart && myChart.resize(), 200)
const props = defineProps({areadataInfo: {type: Array,default: () => []}
});
const state = reactive({MapDataList: [{name: "黑龙江省",value: 44,randomCount: 80,relCenterCount: '80/1092',relDoctorCount: '80/1223',perf: "1%",rank: ''},{name: "湖南省",value: 23,randomCount: 100,relCenterCount: '100/1092',relDoctorCount: '100/1223',perf: "70%",rank: 'Top2'},{name: "云南省",value: 88,randomCount: 180,relCenterCount: '187/1092',relDoctorCount: '190/1223',perf: "80%",rank: 'Top1'},{name: "安徽省",value: 66,randomCount: 90,relCenterCount: '157/1092',relDoctorCount: '188/1223',perf: "60%",rank: 'Top3'},{name: "新疆维吾尔自治区",value: 166,randomCount: 90,relCenterCount: '157/1092',relDoctorCount: '188/1223',perf: "60%",rank: 'Top001'},{name: "内蒙古自治区",value: 106,randomCount: 90,relCenterCount: '157/1092',relDoctorCount: '188/1223',perf: "60%",rank: 'Top002'}] as any
});
watch(() => props.areadataInfo,(newProps) => {if (newProps) {state.MapDataList = newPropsnextTick(() => {initEchartMap();});}},{ immediate: true, deep: true }
);
const emit = defineEmits(['MaphospitalRecommend']);onMounted (() => {window.addEventListener('resize', resize);
})onBeforeUnmount(() => {window.removeEventListener('resize', resize);
})// 初始化地图
function initEchartMap(){echarts.registerMap('china', china) //这个特别重要if (myChart != null && myChart != "" && myChart != undefined) {echarts.dispose(chinaMap.value)}myChart = echarts.init(chinaMap.value);myChart.off('click');//echart 配制option  var options= {tooltip: { // 鼠标移到图里面的浮动提示框// formatter详细配置: https://echarts.baidu.com/option.html#tooltip.formatterformatter(params, ticket, callback) {// params.data 就是series配置项中的data数据遍历let patienticfVal, randomCount, relCenterCount, relDoctorCount, areaName, rankif (params.data) {patienticfVal = params.data.icfCount;randomCount = params.data.randomCount;relCenterCount = params.data.relCenterCount;relDoctorCount = params.data.relDoctorCount;areaName = params.data.areaName;rank = 'Top' + params.data.rank;} else {// 为了防止没有定义数据的时候报错写的patienticfVal = 0;randomCount = 0;relCenterCount = 0;relDoctorCount = 0;rank = '';}let htmlStr = `<div style='font-size:14px; margin-bottom:10px;'> ${areaName ? areaName : params.name} ${rank} </div><p style='text-align:left;margin-top:-4px;'>患者ICF数:${patienticfVal}<br/>患者入组数:${randomCount}<br/>覆盖医院:${relCenterCount}<br/>覆盖医生:${relDoctorCount}</p>`;return htmlStr;},backgroundColor: "#ff7f50", //提示标签背景颜色textStyle: { color: "#fff" }, //提示标签字体颜色padding: [5, 10, 0, 10],  // 设置上下的内边距为 5,0,左右的内边距为 10},visualMap: {  show: true,bottom: 20,left: 50,// left: 50, top: '30%', right: 0, bottom: 0,  //定位的左上角以及右下角分别所对应的经纬度text: ['高', '低'],min: 0,itemHeight: 200,  //图形的高度,即长条的高度。color: ['#ee6666',//红色'#fc8452',//橙色'#fac858',//黄色'#9a60b4',//紫色'#ea7ccc',//淡紫'#3ba272',//绿色'#91cc75',//浅绿'#5470c6',//蓝色'#5283e7',//淡蓝]},    geo: {  // 地理坐标系组件用于地图的绘制// geo配置详解: https://echarts.baidu.com/option.html#geomap: "china", // 表示中国地图roam: true, // 是否开启鼠标缩放和平移漫游// roam : 'scale',scaleLimit: { //滚轮缩放的极限控制min: 1,max: 12},zoom: 1.2, // 当前视角的缩放比例(地图的放大比例)label: {show: false},itemStyle: {normal: {areaColor: "#d5e8f3",borderColor: "#fcfdfe",borderWidth: 1,},emphasis: {areaColor: "#aaa",},},// emphasis: {  // 地图区域的多边形 图形样式。//   borderColoer: "#ffffff",//未选中的状态//   areaColor: "#D8E9FD", //背景颜色//   label: {//     show: true, //显示名称//   },//   itemStyle: {  //选中的状态// 高亮状态下的多边形和标签样式//     shadowBlur: 20,//     shadowColor: "rgba(0, 0, 0, 0.5)",//     borderColoer: "#fff",//     areaColor: "#DA3A3A"//   }// }},series: [{name: "地图", // 浮动框的标题(上面的formatter自定义了提示框数据,所以这里可不写)type: "map",geoIndex: 0,label: {show: true,},// 这是需要配置地图上的某个地区的数据,根据后台的返回的数据进行拼接(下面是我定义的假数据)data: state.MapDataList,}]}myChart.clear();myChart.setOption(options);// window.addEventListener('resize', () => {//   if (myChart) {//     myChart.resize();//   }// });// myChart.resize();//地图的点击事件 ,钻取到市我就不举例了,类似的方法,点击事件可以获取到当前点击的省份的数据;myChart.on('click', function(params) {// console.log(params, '---点击地图---')emit('MaphospitalRecommend', params);})// myChart.on('mouseover', function(params) {//     console.log(params, '---鼠标移入---')// })// myChart.on('mouseout', function(params) {//     console.log(params, '---鼠标移出---')// })
}
</script><style scoped lang="scss">
.leftCard{width: 100%;height: 100%;#chinaMap{width: 100%;height: 600px;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225697.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端开发——JDBC(万字详解)

Java后端开发——JDBC&#xff08;万字详解&#xff09; 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 …

这个校园门禁考勤技术,还怪高级的咧!

随着科技的不断发展&#xff0c;人脸识别技术在各个领域的应用逐渐成为一种趋势。在企业管理中&#xff0c;人脸考勤系统的引入为传统的考勤方式带来了革命性的变革。 传统的考勤方式存在诸多弊端&#xff0c;例如卡片刷卡易被冒用、指纹考勤不够灵活等问题。而基于三维人脸识别…

基于51单片机冰箱温度控制器设计

**单片机设计介绍&#xff0c; 基于51单片机冰箱温度控制器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机冰箱温度控制器设计是一个非常实用的项目。以下是一个基本的介绍&#xff1a; 系统概述&#xff1a; …

城市安全守护者:分析无人机在交通领域的应用

随着科技的进步&#xff0c;无人机在交通领域的应用不断增加&#xff0c;为智慧交通管理提供了新便利。无人机凭借其灵活性&#xff0c;在违章取证、交通事故侦查、交通疏导等方面展现出巨大的应用潜力。无人机在交通领域的应用有哪些&#xff1f;跟着我们一探究竟。 1、违章取…

NAS层协议学习(三)

消息结构 每个NAS消息包含一个协议鉴别符和一个消息标识。协议鉴别符是一个 4 位值&#xff0c;指示正在使用的协议&#xff0c;即对于 EPS NAS 消息是 EMM 或 ESM。消息标识指示发送的特定消息。 EMM 消息还包含一个安全标头&#xff0c;指示消息是否受到完整性保护和/或加密…

​无人机石油管道巡检方案新亮点:灵活准确又高效

在当前石油工业的安全管理中&#xff0c;无人机技术逐渐成为一种不可或缺的工具。随着我国油气管道里程的持续增长&#xff0c;确保这些关键基础设施的安全运行变得越来越重要。传统的巡检方法已经无法满足现代油气行业的需求&#xff0c;而无人机石油管道巡检技术的应用提供了…

Coremail出席2023信息技术应用创新论坛

11月25日&#xff0c;2023信息技术应用创新论坛在常州开幕。江苏省工业和信息化厅副厅长池宇、中国电子工业标准化技术协会理事长胡燕、常州市常务副市长李林等领导出席论坛并致辞。中国工程院院士郑纬民出席并作主题报告。来自产学研用金等各界的千余名代表参加本次论坛。作为…

WebSocket协议在java中的使用

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

功率放大器在超声医疗中的应用有哪些

随着科技的进步和医疗技术的不断发展&#xff0c;功率放大器在超声医疗领域中发挥着重要的作用。超声医疗是一种以超声波作为媒介的医学诊断和治疗技术&#xff0c;具有无创、非放射性和实时性等优势。以下是关于功率放大器在超声医疗中的应用的详细介绍。 一、超声成像&#x…

01 项目架构

关于我 曾经就职于蚂蚁金服&#xff0c;多年的后端开发经验&#xff0c;对微服务、架构这块研究颇深&#xff0c;同时也是一名热衷于技术分享、拥抱开源技术的博主。 个人技术公众号&#xff1a;码猿技术专栏个人博客&#xff1a;www.java-family.cn 前期一直在更新《Spring…

神经网络可视化——基于torchviz绘制模型的计算图

神经网络可视化——基于torchviz绘制模型的计算图 第一步、安装 graphviz 和 torchviz 库 第二步、编写代码生成计算图 第三步、安装graphviz软件 在深入理解深度学习模型时&#xff0c;可视化网络结构是一个非常有用的手段。今天介绍如何使用 torchviz 和 graphviz 来生成网…

oracle FUNCTION(任意两个时间 之间的工作小时)

写函数计算 任意两个时间 之间的工作小时 每天工作时间&#xff08;8:00 - 20:00 共12小时&#xff09;&#xff0c;没有休息日 CREATE OR REPLACE FUNCTION SC_YD_DESI.CALCULATE_WORK_HOURS_FUNC (p_current_time IN DATE,p_order_time IN DATE ) RETURN NUMBER ASp_work_hou…