vue3使用mars3d实现地图轮播高亮,且每个区域颜色不一样

news2024/12/23 6:49:02

效果图(珙县就是轮播高亮的效果)

思路:初始化一张完整的地图,然后定时器去挨个生成每个县上的地图,并且覆盖在原来的位置,每到一定的时间,就清除之前生成高亮图并且生成下一张高亮图
在这里插入图片描述

如何引入地图 上篇文章已详细发过

父组件

获取地图的数据,并且在数据中加上color对应的颜色,并且传递给地图渲染的方法。
map是我初始化进来定义的
在这里插入图片描述
在这里插入图片描述

子组件(详情我放在代码的注释中)

// 定义轮播到第几个地图数据
let cyclicNum = ref(0);
// 定时器
let timer = ref();
//  val就是地图的数据  map就是初始化定义的map
const addDataPopulation = (val, map) => {
	// 先清除已经存在再添加
	if (map.getLayerById("childLineLayer")) {
		map.removeLayer(map.getLayerById("childLineLayer"));
	}
	// 清除一下定时器
	if (timer.value) {
		clearInterval(timer.value);
	}
	// 生成最底下的地图
	const childLineLayer = new mars3d.layer.GeoJsonLayer({
		id: "childLineLayer",
		name: "数据总体概览",
		data: val,
		symbol: {
			type: "polygon",
			styleOptions: {
				fill: true,
				// 定义每个区域的颜色
				color: "{color}",
				// 边界
				outline: true,
				outlineStyle: {
					width: 3,
					color: "#fff"
				},
				// 高亮-鼠标移入区块高亮的方式,可以是click 也可以是hover
				highlight: {
					type: "click",
					fill: true,
					color: "#22906a",
					outline: true,
					outlineStyle: {
						width: 8,
						color: "#3ee9d5",
						// 要加高度,不然原地图上的颜色没法覆盖了
						addHeight: 100
					}
				},
				// 名字-区块上显示的名字
				label: {
					text: "{name}",
					font_size: 20,
					font_family: "楷体",
					outline: true,
					outlineColor: "#000",
					outlineWidth: 3,

					background: false,
					backgroundColor: "#fff",
					backgroundOpacity: 0.1,

					font_weight: "normal",
					font_style: "normal",

					scaleByDistance: true,
					scaleByDistance_far: 20000000,
					scaleByDistance_farValue: 0.1,
					scaleByDistance_near: 1000,
					scaleByDistance_nearValue: 1,

					distanceDisplayCondition: false,
					distanceDisplayCondition_far: 10000,
					distanceDisplayCondition_near: 0,
					visibleDepth: false
				}
			}
		}
	});
	map.addLayer(childLineLayer);
	// 下钻聚焦
	childLineLayer.flyTo({
		scale: 1.5
	});
	// 高亮轮播-使用定时器
	timer.value = setInterval(() => {
		cyclicHighlighting(val, map);
	}, 3500);
	// 点击事件-下钻
	childLineLayer.on(mars3d.EventType.dblClick, function (event) {
		if (map.getLayerById("cyclicHighlightingLayer")) {
			map.removeLayer(map.getLayerById("cyclicHighlightingLayer"));
		}
		let req = {
			parentCode: event.graphic.options.attr.adcode,
			name: event.graphic.options.attr.name
		};

		emit("nextLevelFun", req);
	});
	// 绑定事件-点击高亮
	childLineLayer.on(mars3d.EventType.click, function (e) {
		clearInterval(timer.value);
		if (map.getLayerById("cyclicHighlightingLayer")) {
			map.removeLayer(map.getLayerById("cyclicHighlightingLayer"));
		}
		// console.log("鼠标移入", e.propagatedFrom.options.attr);
		emit("highlightingFun", e.propagatedFrom.options.attr);
	});
	// 绑定事件-取消高亮
	childLineLayer.on(mars3d.EventType.highlightClose, function () {
		timer.value = setInterval(() => {
			cyclicHighlighting(val, map);
		}, 3500);
		console.log("鼠标移出");
	});
};

// 循环高亮 val和map 同上
const cyclicHighlighting = (val, map) => {
	// 判断高亮的地图区块是否存在
	if (map.getLayerById("cyclicHighlightingLayer")) {
		map.removeLayer(map.getLayerById("cyclicHighlightingLayer"));
	}
	// 当区块的数据等于长度的时候 表示一轮已经轮播完了,要重头开始轮播
	if (cyclicNum.value >= val.features.length) {
		cyclicNum.value = 0;
	}
	// 生成高亮区块的地图数据
	let dataHighlighting = {
		features: [val.features[cyclicNum.value]],
		type: "FeatureCollection"
	};
	// 我这儿是需要高亮数据做联动,所以返回给父组件,如果没有需要 删除即可
	emit("highlightingFun", val.features[cyclicNum.value].properties);

	cyclicNum.value++;
	const cyclicHighlightingLayer = new mars3d.layer.GeoJsonLayer({
		id: "cyclicHighlightingLayer",
		name: "数据总体概览-单个",
		data: dataHighlighting,
		symbol: {
			// type: "polygon",
			styleOptions: {
				fill: true,
				opacity: 1,
				clampToGround: false,
				outline: true,
				outlineStyle: {
					width: 5,
					color: "#3ee9d5"
				},
				color: "#22906a",
				// 一定要设置高度,不然初始化的地图板块会盖住高亮颜色
				setHeight: 10
			}
		}
	});
	map.addLayer(cyclicHighlightingLayer);
};

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

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

相关文章

在发布应用程序内测时如何选择合适的分发上架方式?

在现代移动互联网的环境下,应用已经成为人们生活不可或缺的一部分,选择合适的分发方式对于应用的发展和成功来说至关重要。不同的分发方式有着自己的特点和优缺点,所以需要针对性地进行选择。下面分享一些我个人理解的选择合适的分发需要哪些…

temu哪里可以看到买手信息

在拼多多跨境电商平台Temu上查看买手信息是一项非常重要的任务,因为买手是您在平台上购买商品的关键人物。通过查看买手信息,您可以了解买手的信誉、服务质量以及其他用户对其的评价。本文将为您介绍如何在Temu上查看买手信息,并提供一些建议…

如何用gpt改写文章 (1) 神码ai

大家好,今天来聊聊如何用gpt改写文章 (1),希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 如何用GPT改写文章 一、引言 随着人工智能技术的飞速发展,自然语言处理领域取得了重大突…

解题方式篇-回溯

回溯算法 1、简介 简介:回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。回溯是一种暴力的搜索方式。 回溯法,一般可以解决如下几种问题:组合(无序&#xff0…

Spring Boot 3.x.x Spring Security 6.x.x @PreAuthorize 失效

Spring Boot 3.x.x Spring Security 6.x.x PreAuthorize 失效 背景问题解决备注 背景 最近在搞一个后端项目,登录、接口权限、token认证。 版本 Spring Boot 3.2.0 JDK 21 Spring Security 6.2.0 问题 PreAuthorize 失效,没有走认证。 解决 给PreAu…

SD-WAN可以加速视频会议吗?

在企业对远程办公和视频会议的需求越来越多的背景下,网络连接的速度和稳定性对于确保视频会议的顺利进行变得至关重要。那么,SD-WAN组网作为一种网络优化方案,它可以加速视频会议吗? SD-WAN加速的原理在于通过优化网络传输路径和减…

深度学习 | 前馈神经网络与反向传播算法

目录 一、Logistic函数 二、前馈神经网络(FNN) 三、反向传播算法(BP算法) ​四、基于前馈神经网络的手写体数字识别 一、Logistic函数 Logistic函数是学习前馈神经网络的基础。所以在介绍前馈神经网络之前,我们首…

RHEL8_Linux使用podman管理容器

本章主要介绍使用 podman 管理容器 了解什么是容器,容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像 1.了解容器及和镜像的关系 对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下…

crmeb v5自动生成代码报错(adminInfo方法或404路由不存在的问题)

404 现象 调试器中出现了404 , 那肯定是路由出了问题,也就是说,crmeb 为我们生成的路由没有对应的加载上,先来看一下, 自动代码为我们生成的路由是什么样子的 所以有一种最简单的解决办法,就是 把 新生成的路由文件从子目录中挪出一级来,就可以解决404的问题了 下面来说…

机器学习的12个基础问题

1.阐述批归一化的意义 算法 1:批归一化变换,在一个 mini-batch 上应用于激活 x。 批归一化是一种用于训练神经网络模型的有效方法。这种方法的目标是对特征进行归一化处理(使每层网络的输出都经过激活),得到标准差为 …

MX6ULL学习笔记(九)MISC设备驱动

前言 misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动。也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动&#xff0…

.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性

医院检验系统LIS源码,LIS系统全套商业源码 LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳…

开利网络的数字化技术加持下,加快扶贫和乡村振兴的效果和进程!

今日,来自山区省份的从事公益、区域民族文化传播、帮扶贫困地区脱贫、农业兴村贵州项目组一行来开利进行数字化脱贫、帮助乡村振兴解决方案探讨交流,交流中,开利网络总结出历经多年实践验证且行之有效的数字化经营、数字化建设经验得到与会成…

Elasticsearch:使用 OpenAI 生成嵌入并进行向量搜索 - nodejs

在我之前的文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)(二)(三)(四)​​​​​ 我详细地描述了如何使用…

做题总结 19. 删除链表的倒数第 N 个结点(快慢指针思想)

19. 删除链表的倒数第 N 个结点 最初的想法进阶实现(Java) 最初的想法 计算出链表中的节点总数,然后遍历找到目标节点并删除。 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode cur head;int count0;w…

直流电、交流电、电磁波、光之间的联系

直流电、恒定磁场、交流电、交变磁场、电磁波、光之间的联系 频率为0Hz的直流电及恒定磁场 从频率的角度上看,直流电与恒定磁场的方向不变,频率为0Hz. 如可充电锂离子电池的电压3.7V, 干电池的电压1.5V. 磁铁的磁场方向从N极到S极,始终保持…

9mysql存储过程,存储函数和触发器

MySql 存储过程和触发器_mysql存储过程和触发器-CSDN博客文章浏览阅读162次。MySql存储过程、存储函数和触发器_mysql存储过程和触发器https://blog.csdn.net/chenniorange/article/details/132376605存储过程例子 -- A. 定义局部变量, 记录累加之后的值; -- B. 每循环一次, 就…

Ai 算法之Transformer 模型的实现: 一 、Input Embedding模块和Positional Embedding模块的实现

一 文章生成模型简介 比较常见的文章生成模型有以下几种: RNN:循环神经网络。可以处理长度变化的序列数据,比如自然语言文本。RNN通过隐藏层中的循环结构来传递时间序列中的信息,从而使当前的计算可以参照之前的信息。但这种模型…

一个算法一个例题教会你算法---0-1背包问题

动态规划 0-1背包问题 0-1背包问题就是求在有重量限制的情况下如何装入价值最大的物品。 啥也别说,直接看题: 现在有四个可以放的物品,w代表重量,v代表价值。 step1: 我们列一个背包重量 j 从0到5的表格&#xff0…

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…