地图下钻,双击返回上一级

介绍:
看了好多地图下钻的案例,要么json文件不全胡,要么返回功能不全胡,有的返回是直接写死,返回到首页,我这个小案例是使用地理小工具的数据,本案例可以逐步一级一级的返回,地图的其他样式可以根据项目需求在option中配置。

lodash4.17.21版本:

<!doctype html>
<html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><style>#chart-panel {position: absolute;left: 0;right: 0;top: 0;bottom: 0;}</style><script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.2.1/echarts.min.js"></script><!-- <script src="https://lib.baomitu.com/echarts/4.1.0/echarts.min.js"></script> --><script src=""></script><script src="./静态资源/Lodash4.17.21.min.js"></script><script src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"></script><!-- <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.2.1/echarts.min.js"></script> -->
</head><body><div id="chart-panel" style="margin-top:30px"></div><!-- 为ECharts准备一个具备大小(宽高)的Dom --><script type="text/javascript">//各省份的数据var allData = [{name: '北京'}, {name: '天津'}, {name: '上海'}, {name: '重庆'}, {name: '河北'}, {name: '河南'}, {name: '云南'}, {name: '辽宁'}, {name: '黑龙江'}, {name: '湖南'}, {name: '安徽'}, {name: '山东'}, {name: '新疆'}, {name: '江苏'}, {name: '浙江'}, {name: '江西'}, {name: '湖北'}, {name: '广西'}, {name: '甘肃'}, {name: '山西'}, {name: '内蒙古'}, {name: '陕西'}, {name: '吉林'}, {name: '福建'}, {name: '贵州'}, {name: '广东'}, {name: '青海'}, {name: '西藏'}, {name: '四川'}, {name: '宁夏'}, {name: '海南'}, {name: '台湾'}, {name: '香港'}, {name: '澳门'}];// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('chart-panel'));for (var i = 0; i < allData.length; i++) {allData[i].value = Math.round(Math.random() * 100);}var allmapdata = [];//每点击一次,都将获取的地图level、name和mapcode储存在数组中var bigArray = [];//保存所有点击过的区域显示的地图,不重复的数组var timeFn = null;var click_history_path_Arry = [];//点击的历史记录click_history_path_Arry.push({//初始历史记录type: 'FeatureCollection',level: 'country',name: '中国',adcode: 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=100000_full'})localStorage.setItem('click_history_path_Arry', JSON.stringify(click_history_path_Arry))console.log('初始历史记录:', click_history_path_Arry);loadMap('https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=100000_full', '中国');  //初始化地图/**获取对应的json地图数据,然后向echarts注册该区域的地图,最后加载地图信息@params {String} mapCode:json数据的地址@params {String} name: 地图名称*/function loadMap(mapCode, name) {$.get(mapCode, function (data) {console.log('传入省份json网址的数据:', data.features);var detail_data = []// 从中国地图数据中获取每个省份的名字// console.log("获取点击后的下一级数据:");// console.log("子节点数量:", data.features.length);data.features.forEach(item => {// console.log( item.type, item.properties.level, item.properties.name, item.properties.adcode);if (item.properties.level == 'province') {detail_data.push({type: item.type,level: item.properties.level,name: item.properties.name,adcode: 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=' + item.properties.adcode + '_full'})}else if (item.properties.level == 'city') {detail_data.push({type: item.type,level: item.properties.level,name: item.properties.name,adcode: 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=' + item.properties.adcode + '_full'})}else if (item.properties.level == 'district') {detail_data.push({type: item.type,level: item.properties.level,name: item.properties.name,adcode: 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=' + item.properties.adcode})}});allmapdata.push(...detail_data)//将点击后显示的区域都追加到allmapdata数组bigArray = _.uniqWith(allmapdata, _.isEqual);//利用loadsh进行数组去重// 将 bigArray 转换为字符串,并保存到 localStorage  localStorage.setItem('bigArray', JSON.stringify(bigArray));//console.log('全量不重复数据:', bigArray);//这个数组数据很有用if (data) {echarts.registerMap(name, data);var option = {tooltip: {show: true,textStyle: {color: '#681752',//文字的颜色。fontStyle: 'normal',//文字字体的风格。fontWeight: 'bolder',fontSize: 20,textBorderWidth: 4,textBorderType: 'solid',},formatter: function (params) {if (params.data) return params.name + ':' + params.data['value']},},// 视觉映射组件,用于视觉编码,如颜色、大小等  visualMap: {type: 'continuous',//连续型数据 text: ['', ''],// 文本,默认为数值文本,为空时则不显示  showLabel: false,//false    true// 是否显示文字标签 left: '50',// 组件离容器左侧的距离 min: 0,// 映射的最小值 max: 100,// 映射的最大值  inRange: {// 在视觉映射范围内的视觉元素  color: ['#edfbfb', '#b7d6f3', '#40a9ed', '#3598c1', '#215096',]},splitNumber: 0,// 这里设置为0可能会按照数据自动计算分割段数 },//roam: true, // 是否开启鼠标缩放和平移漫游 series: [{name: 'MAP',type: 'map',mapType: name, // 使用的地图类型,这里使用了变量 name 来动态指定selectedMode: 'false',//是否允许选中多个区域layoutCenter: ["50%", "50%"], //地图位置layoutSize: "100%",zoom: 1, //当前视角的缩放比例label: {normal: {show: true,// 正常状态下是否显示标签 },emphasis: {show: true,// 高亮状态下是否显示标签}},data: allData,// 数据内容,这里使用了变量 allData 来动态指定 }]};myChart.setOption(option);}else {alert('json数据不存在,无法加载该地图');}});}// 查询函数,通过name属性,查找adcodefunction findAdcodeByName(name, data) {for (let i = 0; i < data.length; i++) {if (data[i].name === name) {return data[i].adcode;}}return null; // 如果没有找到,返回null或你想要的任何默认值  }//单击切换到省级地图,当mapCode有值,说明可以切换到下级地图myChart.on('click', function (params) {clearTimeout(timeFn);//由于单击事件和双击事件冲突,故单击的响应事件延迟250毫秒执行// console.log(params);timeFn = setTimeout(function () {var name = params.name; //获取单击时区域的名字const mapCode = findAdcodeByName(name, JSON.parse(localStorage.getItem('bigArray')));//通过name在全量数据中查找mapcode路径localStorage.setItem('danji_name', name)//将单击时的区域名字存储本地localStorage.setItem('danji_mapcode', mapCode)//将单击时的区域json数据存储本地var get_name = localStorage.getItem('danji_name')var get_mapcode = localStorage.getItem('danji_mapcode')console.log("单击区域名字:", get_name, "单击区域mapcode:", get_mapcode);// 当点击的时候将点击区域的名字和mapcode推进历史记录数组setTimeout(function () {click_history_path_Arry = JSON.parse(localStorage.getItem('click_history_path_Arry'));console.log('获取第一次路径:', click_history_path_Arry);click_history_path_Arry.push({name: get_name,adcode: get_mapcode})click_history_path_Arry = _.uniqWith(click_history_path_Arry, _.isEqual);//利用loadsh进行数组去localStorage.setItem('click_history_path_Arry', JSON.stringify(click_history_path_Arry));console.log('历史路径:', click_history_path_Arry);//这个有路径}, 200)if (!mapCode) {alert('无此区域地图显示!!!');return;}loadMap(mapCode, name);}, 250);});// 绑定双击事件,返回全国地图myChart.on('dblclick', function (params) {//当双击事件发生时,清除单击事件,仅响应双击事件clearTimeout(timeFn);// 对历史路径中的元素进行去重var get_click_history_path_Arry = _.uniqWith(JSON.parse(localStorage.getItem('click_history_path_Arry')), _.isEqual)console.log('从本地获取的历史路径:', get_click_history_path_Arry);// 检查数组是否非空  if (get_click_history_path_Arry.length > 1) {// 获取倒数第二个元素的索引(因为JavaScript的索引是从0开始的)  const lastIndex = get_click_history_path_Arry.length - 2;// 访问该索引的name和adcode  const his_name = get_click_history_path_Arry[lastIndex].name;const his_adcode = get_click_history_path_Arry[lastIndex].adcode;// 打印结果  console.log('上传名字:', his_name);console.log('上传Adcode:', his_adcode);loadMap(his_adcode, his_name);const newAreas = get_click_history_path_Arry.slice(0, get_click_history_path_Arry.length - 1);localStorage.setItem('click_history_path_Arry', JSON.stringify(newAreas))//将删除后的数组覆盖掉本地原有的数组}else {alert('暂无历史记录.');}});</script>
</body>
</html>

效果图片:
在这里插入图片描述
单击进入下一级:
在这里插入图片描述
单击再次进入下一级:
在这里插入图片描述
双击返回上一级:
在这里插入图片描述
返回到首页:
在这里插入图片描述

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

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

相关文章

【旧文更新】【优秀课设】基于FPGA的Verilog HDL自动售货机

【旧文更新】基于FPGA的Verilog HDL自动售货机 文章目录 关于旧文新发FPGACortex-M架构SysTick系统定时器阻塞和非阻塞延时 附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函…

Three.js 中的场景与相机基础

Three.js 中的场景与相机基础 一、场景&#xff08;Scene&#xff09; 在 Three.js 中&#xff0c;场景是所有 3D 对象存在和交互的容器。艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨&#xff1a;它就像是一个虚拟的 3D 空间&#xff0c;我们可以在其中…

端午节趣味互动小游戏的作用是什么

端午节吃粽子&#xff0c;多数行业商家都可借势进行品牌营销&#xff0c;而一场营销效果的优劣&#xff0c;除了好方案外&#xff0c;还需要好的工具/渠道及运营等&#xff0c;围绕粽子元素的互动小游戏是营销互动的主要形式之一。 运用【雨科】平台拥有多款端午节粽子主题互动…

leetcode 1270 向公司CEO汇报工作的所有人(postgresql)

需求 员工表&#xff1a;Employees ---------------------- | Column Name | Type | ---------------------- | employee_id | int | | employee_name | varchar | | manager_id | int | ---------------------- employee_id 是这个表的主键。 这个表中每一行中&#xff0c;e…

用于脑肿瘤分割的跨模态深度特征学习| 文献速递-深度学习肿瘤自动分割

Title 题目 Cross-modality deep feature learning for brain tumor segmentation 用于脑肿瘤分割的跨模态深度特征学习 01 文献速递介绍 作为最致命的流行病&#xff0c;脑肿瘤的研究越来越受到关注。本文研究了一种基于深度学习的自动分割胶质瘤的方法&#xff0c;称为脑…

raid 磁盘阵列

raid 磁盘阵列&#xff1a; **条带化存储&#xff1a;**数据分散在多个物理磁盘上的存储方式。利用多个磁盘并行读取和写入。 条带化的存储性能和读写性能是最好的。 磁盘的组成方式不同&#xff0c;也就是不同的raid级别&#xff1a; **raid 0&#xff08;条带化存储&#x…

高级软件工程师带你解决MySQL死锁问题Deadlock found when trying to get lock实战案例全网唯一

高级软件工程师带你解决MySQL死锁问题Deadlock found when trying to get lock实战 前言 笔者我实际工作中&#xff0c;经常遇到mysql数据库死锁问题&#xff01;CSDN上面也有很多大神刨析解决方法&#xff01; 我在实际工作中的MySQL数据库架构很复杂&#xff0c;又涉及到主…

MT3045 松鼠接松果

思路&#xff1a; 求x的一个区间&#xff0c;使区间中的松果的最大y坐标和最小y坐标的差至少为D。若有多个区间&#xff0c;则取最小的那个。 即使用单调队列不断维护最大值和最小值。 首先L固定不动&#xff0c;R不断右移&#xff1a; 即若函数f(R)max[L,R]-min[L,R] >…

自建视频托管平台:MediaCMS

目录 1 MediaCMS简介1.1 介绍1.2 特性1.3 应用场景 2 安装配置2.1 安装1、安装2、汉化 2.2 一些常见配置 3 简单使用3.1 上传3.2 下载3.3 添加标题或者字幕3.4 通过Tag/Category实现视频/文件分类添加 Tag给任一资源分类 1 MediaCMS简介 1.1 介绍 MediaCMS是一个现代的&#…

Spring +SpringMVC+Mybatis项目详细构造

一&#xff0c;文档详解 1&#xff0c;web.xml配置 配置spring监听器&#xff1a; 指定spring配置文件的位置和名称&#xff0c;扫描会先扫描此文件&#xff0c;此文件中的扫描文档作为父类扫描&#xff0c;父类扫描不可访问子类扫描&#xff0c;子类扫描可访问父类扫描 &l…

LeetCode --- 399周赛

题目列表 3162. 优质数对的总数 I 3163. 压缩字符串 III 3164. 优质数对的总数 II 3165. 不包含相邻元素的子序列的最大和 一、优质数对的总数I 这里由于数据范围比较小&#xff0c;我们可以直接暴力枚举&#xff0c;代码如下 class Solution { public:int numberOfPairs…

5292A 物联网信号分析仪

5292A 物联网信号分析仪 —— 10MHz&#xff5e;6GHz —— 简述 5292A物联网信号分析仪是一款通用的矢量信号分析仪&#xff0c;频率范围覆盖 10MHz&#xff5e;6GHz&#xff0c;具有良好的频率、功率测量精度和稳定度&#xff1b;支持模拟与数字调制信号、全制式的通信标准…

【错误记录】HarmonyOS 运行报错 ( Failure[MSG_ERR_INSTALL_FAILED_VERIFY_APP_PKCS7_FAIL] )

文章目录 一、报错信息二、问题分析二、解决方案 一、报错信息 在 DevEco Studio 中 , 运行程序 , 编译时正常编译 , 但是在真机运行时 , 报如下错误 , 核心报错信息是 " Failure[MSG_ERR_INSTALL_FAILED_VERIFY_APP_PKCS7_FAIL] " ; 完整报错信息 : 05/29 10:58:55…

【机器学习300问】104、残差网络是怎么起作用的?

残差网络&#xff08;Residual Network&#xff0c;简称ResNet&#xff09;诞生是为了解决深度神经网络的训练困难性问题。深度神经网络在图像分类等任务上取得了重大突破&#xff0c;但随着网络层数的增加&#xff0c;训练变得更加困难。 一、神经网络深度过深会出现…

用docker搭建的Vulfocus镜像管理界面没有镜像可以拉取解决办法

ps&#xff1a;截止到今天2023.4.2&#xff0c;kali和vps的docker拉取的vulfocus镜像会有版本的区别&#xff0c;虽然都是拉取的最新版&#xff0c;vps上镜像为3个月以前&#xff0c;kali上为16个月以前&#xff0c;所以在修改 views.py 文件时&#xff0c;可能会发现文件内容不…

国家首批20个“数据要素×”典型案例发布,珈和科技助力金融、气象两案例入榜

5月24日&#xff0c;国家数据局会同生态环境部、交通运输部、金融监管总局、中国科学院、中国气象局、国家文物局、国家中医药局等部门在第七届数字中国峰会主论坛上发布首批20个“数据要素”典型案例。 其中&#xff0c;珈和科技以其专业的产品和服务助力金融服务领域的浙江网…

GDPU 操作系统 天码行空13

文章目录 ❌ TODO&#xff1a;本文仅供参考&#xff0c;极有可能有误1.生产者消费者问题&#xff08;信号量&#xff09;&#x1f496; ProducerConsumerExample.java&#x1f3c6; 运行结果 &#x1f496; ProducerConsumerSelectiveExample.java&#x1f3c6; 运行结果 2.实现…

【UnityShader入门精要学习笔记】第十五章 使用噪声

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 使用噪声上…

【JS基础语法04】运算符分类以及运用

一&#xff1a;赋值运算符 1 类型 赋值运算符包括以下&#xff1a;、、-、*、/ 2 原理 &#xff0c;是将等号右边的数赋值给左边以为例(-、*、/和运算逻辑是相同的) let num 5 num2 等价于 let num 5 numnum2 //num7 二&#xff1a;一元运算符 1怎么判断运算符是几元…

多条文本转二维码怎么做?一键批量建码的使用技巧

怎么快速的制作多条文本信息的二维码&#xff1f;随着二维码的广泛使用&#xff0c;现在很多内容都可以通过生成二维码扫码的方式来获取信息&#xff0c;其他文本二维码就是比较常用的一种类型。那么当需要将多条不同的文本内容每条单独生成二维码时&#xff0c;有什么方法可以…