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

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

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

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

父组件

获取地图的数据,并且在数据中加上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);
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做数据分析为何要学统计学(5)——什么问题适合使用卡方检验?

卡方检验作为一种非常著名的非参数检验方法(不受总体分布因素的限制),在工程试验、临床试验、社会调查等领域被广泛应用。但是也正是因为使用的便捷性,造成时常被误用。本文参阅相关的文献,对卡方检验的适用性进行粗浅…

瑞萨RZ/G2L核心板Linux Log目录文件详解

为了排除系统问题,监控系统健康状况以及了解系统与应用程序的交互方式,我们需要了解各log文件的作用,以G2L中yocto文件系统为例,在系统/var/log/目录下会存放记录系统中各个部分的log文件作用如下: 1. 文件详情 下图…

k8s详细教程(一)

—————————————————————————————————————————————— 博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码…

Docker安装与使用

Docker 1.初识Docker Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像Docker应用运行在容器中,使用沙箱机制,相互隔离 Docker…

2023/12/11 作业

1.思维导图 2.作业 成果&#xff1a; 第一个头文件 #ifndef TEST3GET_H #define TEST3GET_H #include <QWidget> #include<QMessageBox> QT_BEGIN_NAMESPACE namespace Ui { class test3get; } QT_END_NAMESPACE class test3get : public QWidget { Q_OBJE…

人工智能_机器学习063_SVR支持向量机_回归拟合天猫双十一销量方程---人工智能工作笔记0103

之前我们用线性回归做过天猫双十一销量预测的数据,现在我们再来用SVR支持向量机来做一下 首先上面是给出了销量,对应2009年到2019年的,销售额 可以看到: X=np.arange(2009,2020)-2008 统一减去2008的话看起来数据比较简单了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

uniCloud(二) 使用数据库、前端展示数据

一、在云服务空间的云数据库中新建一张表 &#xff08;1&#xff09;它有两种方式&#xff0c;我暂时手动创建一张表 &#xff08;2&#xff09;修改表结构&#xff1a;权限read为true &#xff08;3&#xff09;添加数据记录 注意&#xff1a;需要一条一条的加入 二、在前端…

PR快闪模板|简约时尚快节奏开场视频PR模板剪辑素材

这是一款Premiere Pro快闪模板&#xff0c;简约时尚快节奏开场视频 pr模板剪辑素材&#xff0c;用于以独创的方式创建明亮的介绍、时尚的开场白或模特展示。 Premiere Pro CC21及以上&#xff0c;即使是初学者也可以轻松使用&#xff0c;包含视频教程。 来自PR模板网&#xff1…

【Proteus仿真】【51单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示…

leetcode 904. 水果成篮(优质解法)

代码&#xff1a; class Solution {public int totalFruit(int[] fruits) {int lengthfruits.length;int []fruitNumsnew int[length1]; //用于记录各个种类摘了多少个水果int count0; //用于记录当前采摘了几种水果int sum0; //用于记录当前共摘了多少水果for(int left0…

jupyter报错KeyError: ‘icosapent‘

指的是未找到关键词 代码想在一个pkl文件里找到关键词对应的值&#xff0c;然后报了这个错 尝试直接双击pkl文件&#xff0c;显示&#xff1a; 这个意思不是说这个文件保存失败&#xff0c;也不是说这个文件是坏的&#xff0c;而是jupyter无法读取这个格式。 换成pycharm运行…

TypeScript 常用高级类型

目录 前言&#xff1a; TypeScript 常用高级类型 基本概念 高级类型 1. 交叉类型&#xff08;Intersection Types&#xff09; 2. 联合类型&#xff08;Union Types&#xff09; 3. 映射类型&#xff08;Mapped Types&#xff09; 4. 条件类型&#xff08;Conditional…

PyQt---基本界面设计【附代码】

Qt是GUI开发中的一个工具&#xff0c;可以根据用户需求进行程序界面的开发。Qt的开发有C版的和python版的&#xff0c;不论你有哪种编程语言的基础都很好上手学习。PyQt5是Qt框架的Python语言实现&#xff0c;也是本文将要介绍的&#xff0c;并将会建立一个PyQt专栏不断更新供大…

解决亚马逊,速卖通,eBay买家账号关联问题,提高下单成功率

做自养号测评、补单首先要解决的就是安全性的问题&#xff0c;如果安全性解决的不了的话&#xff0c;其他的都不要再提了 让我们了解一下市面上的IP及可能遇到的问题。 目前&#xff0c;常见的IP包括luminati、googelfi、922、TM流量卡和Rola&#xff0c;Rrocks专线等。主要问…

在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;既然要排列组合&#xff0c;就得先根据数字字符取出来 所以先定义一个string类的数组通过下标取到每个数字对应的映射。 string _numsTostr[10]{"","","abc"…

医学多模态模型总结(一)

概念 医学多模态大模型是指利用多种不同的医学数据源和模型&#xff0c;通过深度学习和人工智能技术&#xff0c;构建一个综合性的大型模型&#xff0c;以实现更加准确和全面的医学数据分析和预测。 这种模型可以同时处理多种医学数据类型&#xff0c;如医学图像、病历文本、…

应用在LED灯光控制触摸屏中的触摸芯片

LED灯光控制触摸屏方法&#xff0c;包括&#xff1a;建立触摸屏的触摸轨迹信息与LED灯光驱动程序的映射关系&#xff1b;检测用户施加在触摸屏上的触摸轨迹&#xff0c;生成触摸轨迹信息&#xff1b;根据生成的触摸轨迹信息&#xff0c;调用对应的LED灯光驱动程序&#xff0c;控…

HTML 块级元素与行内元素有哪些以及注意、总结

行内元素和块级元素是HTML中的两种元素类型&#xff0c;它们在页面中的显示方式和行为有所不同。 块级元素&#xff08;Block-level Elements&#xff09;&#xff1a; 常见的块级元素有div、p、h1-h6、ul、ol、li、table、form等。 块级元素会独占一行&#xff0c;即使没有…

web服务器之——搭建两个基于不同端口访问的网站

要求如下&#xff1a; 建立一个使用web服务器默认端口的网站&#xff0c;设置DocumentRoot为/www/port/80&#xff0c;网页内容为&#xff1a;the port is 80。建立一个使用10000端口的网站&#xff0c;设置DocumentRoot为/www/port/10000&#xff0c;网页内容为&#xff1a;t…

太阳能光伏企业网站建设效果如何

光伏行业近些年发展也比较迅速&#xff0c;其服务/产品拓展度较高&#xff0c;对企业来说&#xff0c;合作商较少更需要多地域寻找目标客户及信息承载展示、拓展等&#xff0c;传统线下方式单一且不足&#xff0c;线上成为众商家经营的方向。 1、品牌宣传、信息呈现难 太阳能…