当前位置: 首页 > news >正文

echarts实现地图下钻并解决海南群岛显示缩略图

一、准备工作

1、echarts版本: ^5.5.1

2、去掉海南数据的json文件

二、获取删除过后的json文件

1、DataV.GeoAtlas地理小工具系列 (aliyun.com)

在网站输入这个复制的,新建一个json文件粘贴进去。

接下来需要删除两个地方,不要删错!!!!!

   1、

全局搜索海南,只保留圈出来的第一个数组(海南),其余全部删除(群岛数据)。

   2、

从这里折叠起来,全部删除。

得到的json文件就是不显示群岛的json文件,如果需要显示群岛就不用删除!

注意:如果删错可能导致地图缩小到很小,不知道什么原因,我出现过这种问题,一定不要删除错误!!!

<template><i-icon name="fanhui" class="goback-icon" @click.native="goBack"></i-icon><div ref="mapChartRef" style="height: 100%; width: 100%"></div>
</template><script setup>
import axios from "axios";
import { ref, onMounted } from "vue";
import * as echarts from "echarts";
import geoJson from './china.json'
import { ElMessage } from "element-plus";const mapChartRef = ref();
const initChinaMap = ref();
const initAdCode = ref(100000); // 默认中国地图的编码
const currentMapName = ref("china");; // 默认地图的名称
const mapList = ref([]); // 当前展示的省市区所有数据
const historyInfo = ref([]); // 记录历史点击的省市区,用于返回查询
var dataNum = [];
const balloonColor = (num) => {if (num > 30) {return '#c45656'}return '#ffcc00'
}// 获取地图数据
const getMapData = async (code) => {initAdCode.value = codeif (code !== 100000) {const data = await axios.get(`https://geo.datav.aliyun.com/areas_v3/bound/${code}_full.json`).then((res) => {mapList.value = [];if (res.status === 200) {// 获取当前选中的省市区的所有名称和编码res.data.features.forEach((item) => {mapList.value.push(item.properties);});renderChart(currentMapName.value, res.data);}}).catch(() => { });return data;} else {geoJson.features.forEach((item) => {mapList.value.push(item.properties);var name = item.properties.name,cp = item.properties.center;if (cp) {dataNum.push({name: name,value: cp.concat(Math.round(Math.random() * 100))})}});renderChart('china', geoJson);}
};const seriesMap = (mapName) => {const commonSeries = {type: "map",map: mapName, // 地图名称data: [],zoom: "1.2", // 当前视角的缩放比例label: {show: true,formatter: '{b}',color: "#fff",},emphasis: { //高亮show: true,label: {show: true,formatter: '{b}',color: "#000",}},itemStyle: {areaColor: '#213dc8',borderColor: '#6a98ff',borderWidth: 1,},}let series = []if (initAdCode.value === 100000) {series = [{name: '黄色热气球',type: 'scatter',coordinateSystem: 'geo',symbol: 'pin',symbolSize: [50, 50],label: {show: true,color: '#000',fontSize: 9,formatter(value) {return value.data.value[2]}},itemStyle: {color: (e) => {return balloonColor(e.data.value[2])}, // 标志颜色'#ffcc00'},showEffectOn: 'render',rippleEffect: {brushType: 'stroke'},zlevel: 1,data: dataNum}]}return [commonSeries, ...series]
}
// 渲染地图
const renderChart = (mapName, mapData) => {// 注册: registerMap('地图名称', 地图数据), 地图名称须和option里面的map一致echarts.registerMap(mapName, mapData);// 地图配置项const option = {geo: {// nameMap: {//     China: '中国',// },map: mapName,label: {emphasis: {show: false,},},zoom: 1.2,itemStyle: {normal: {borderColor: 'rgba(255,209,163, .5)', //区域边框颜色areaColor: 'rgba(73,86,166,.1)', //区域颜色borderWidth: 0.5, //区域边框宽度shadowBlur: 5,shadowColor: 'rgba(107,91,237,.7)',},emphasis: {borderColor: '#FFD1A3',areaColor: 'rgba(102,105,240,.3)',borderWidth: 1,shadowBlur: 5,shadowColor: 'rgba(135,138,255,.5)',},},},// 提示浮窗样式series: seriesMap(mapName),selectedMode: "single", //选择模式,单选,只能选中一个地市select: {//这个就是鼠标点击后,地图想要展示的配置disabled: true,//可以被选中itemStyle: {color: '#fff',borderColor: '#FFD1A3',areaColor: 'rgba(102,105,240,.2)',borderWidth: 1,shadowBlur: 5,shadowColor: 'rgba(135,138,255,.5)',}}};// 渲染initChinaMap.value.setOption(option, true);// 防止多次触发click事件,重要!!!initChinaMap.value.off("click");// 下钻initChinaMap.value.on("click", (params) => {const activeItem = mapList.value.find((item) => item.name == params.name);// 判断有子级的时候才可以下钻if (activeItem && activeItem.adcode && activeItem.childrenNum) {historyInfo.value.push(activeItem);currentMapName.value = params.name;getMapData(activeItem.adcode);} else {ElMessage.warning('暂无下级!')}});
};onMounted(() => {initChinaMap.value = echarts.init(mapChartRef.value);getMapData(initAdCode.value);
});// 返回上一级
const goBack = () => {const lastItem = historyInfo.value.pop();if (lastItem && lastItem.parent && lastItem.parent.adcode) {getMapData(lastItem.parent.adcode);}
};
</script><style scoped>
.goback-icon {width: 30px;height: 30px;position: absolute;top: 0;left: 0;z-index: 100;cursor: pointer;
}
</style>

代码贴出来了,自己看吧!我的思路是把全国地图和下钻的serios分开了,因为其他省的不需要热气球显示数字。

还有一个需要注意的点是如果设置地图div盒子为500*500你会发现没有铺满容器,但是大屏还是铺满容器好看,所以我设置了zoom:1.2,但是只设置serios里面的zoom:1.2会导致分层,就是这样

很明显吧,导致这个的原因是里面的geo没有放大就导致外面一层放大里面还是原样,所以

geo也需要给1.2

这样就可以得到铺满屏幕的地图了!!!

下钻也很成功。

!!!!注意:如果地图请求接口报错403

可以在index.html加

<meta name=”referrer” content=”no-referrer”>

记得重启!!!

其实还有一种办法。

首页 - ECharts图表集,ECharts demo集,echarts gallery社区,Make A Pie,分享你的可视化作品isqqw.com

直接用这个网站的接口就不用分两种情况了,数据就是海南省缩略的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速使用react 全局状态管理工具--redux
  • 红队打点的思路与信息收集
  • 2025秋招LLM大模型多模态面试题(六)-KV缓存
  • Spring 源码解读:实现自定义注解处理器
  • Leetcode 和为 K 的子数组
  • 【面向对象】设计模式分类
  • arm和riscv系统调用对比(笔记)
  • 线程调优——调整线程池参数提升程序执行效率
  • git-fork操作指南
  • Linux6-vi/vim
  • Snowflake的“AI + 数据” 模式,如何颠覆传统数据处理!
  • 掌握 Flutter 中的 `Overlay` 和 `OverlayEntry`:弹窗管理的艺术
  • 大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍
  • 前端在网络安全攻击问题上能做什么?
  • 计算机四级-计算机网络
  • JavaScript 如何正确处理 Unicode 编码问题!
  • bearychat的java client
  • Centos6.8 使用rpm安装mysql5.7
  • emacs初体验
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • maya建模与骨骼动画快速实现人工鱼
  • Python十分钟制作属于你自己的个性logo
  • React Native移动开发实战-3-实现页面间的数据传递
  • WebSocket使用
  • 分享一份非常强势的Android面试题
  • 欢迎参加第二届中国游戏开发者大会
  • 前端性能优化--懒加载和预加载
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 强力优化Rancher k8s中国区的使用体验
  • 译自由幺半群
  • 1.Ext JS 建立web开发工程
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #100天计划# 2013年9月29日
  • #单片机(TB6600驱动42步进电机)
  • $jQuery 重写Alert样式方法
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)SpringCloud 整合Python
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2015)JS ES6 必知的十个 特性
  • (3) cmake编译多个cpp文件
  • (3)STL算法之搜索
  • (4.10~4.16)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (回溯) LeetCode 46. 全排列
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (七)理解angular中的module和injector,即依赖注入
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)