echarts-gl的type为map3D修改不同区域的颜色和点击事件

这篇具有很好参考价值的文章主要介绍了echarts-gl的type为map3D修改不同区域的颜色和点击事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图
echarts3d地图点击区域变色,echarts,vue
regions的数据格式
echarts3d地图点击区域变色,echarts,vue
以下是地图初始化代码、双击地图和单击高亮,方法是封装后的,mapData 的数据格式我放在后面,均有注释

const drawEcharts = mapData => {
	//数据过多的时候,echarts渲染过慢,可以使用此方法
	if (myChart.value) {
		myChart.value.dispose();
	}
	let chartDom = centerMap.value;
	myChart.value = echarts.init(chartDom);
	myChart.value.clear();
	myChart.value.resize();
	let nameMap = "centerMap";
	// 图标数据
	// 根据传入的type获取不同的初始数据
	mapDataList = mapData;

	// 根据获取到的区划第一个查询区划的等级(地图下转的时候用,如果不需要可以用,这个是为了获取区划等级)
	currentMapLevel.value = mapUtils.getRegionLevel(mapData.features[0].properties.adcode.toString());
	//渲染地图数据
	echarts.registerMap(nameMap, mapData);
	// mapData的数据中含有每个区对应有多少人(如:成都市1000人)
	//number和resultSac是将每个区的人数做一个排序,然后规定一个范围,然后某个范围只能用一种颜色
	// 比如索引中0-5是颜色#d0f8ff,6-11是颜色#93d5fd以此类推
	// 这两个代码主要是为了让颜色能更好的划分区域,也可以自己手动划分,如果手动划分,number和resultSac是可以不要的

	// 获取分段后数据
	let number: any = mapData.features
		.map(function (feature) {
			return feature.properties.num ? Number(feature.properties.num) : 0;
		})
		.sort(function (a, b) {
			return a - b;
		});
	// mapUtils.sacdata是封装的方法,可以不需要
	let resultSac = mapUtils.sacdata(number, 5);
	// 地图模块颜色划分(这是主要的颜色划分)regions 的数据格式放在上面的,可以对照查看,手动的我放在下面了
	let regions = mapData.features.map(function (feature) {
		let colorArr = ["#d0f8ff", "#93d5fd", "#5eaedd", "#3787b7", "#0e6598"];
		let colorNum = 0;
		for (let index = 0; index < resultSac.length; index++) {
			if (feature.properties.num <= resultSac[index]) {
				colorNum = index;
				break;
			}
		}
		return {
			name: feature.properties.name,
			value: feature.properties.adcode,
			num: feature.properties.num,
			itemStyle: { color: colorArr[colorNum] }
		};
	});
	// console.log(regions, "regions");
	// 地图配置
	let optionMap = {
		geo3D: {
			//加载geo3D
			map: nameMap,
			// 设置3D视角的位置和朝向
			viewControl: {
				distance: 130, // 相机距离物体的距离
				alpha: 70, // 三维场景水平方向的旋转角度
				beta: 30 // 三维场景垂直方向的旋转角度
			},
			// 文字
			label: {
				show: false,
				fontSize: 13,
				fontWeight: 600,
				opacity: 1,
				textStyle: {
					backgroundColor: "transparent", // 设置 label 背景透明
					color: "#ffffff", // 设置 label 文字颜色
					fontFamily: "YSBTH"
				}
			},
			itemStyle: {
				color: "#5ca3f9", //将geo3d数据设置为透明
				opacity: 1, //透明
				borderColor: "#62def5",
				borderWidth: 1,
				areaColor: "rgba(37,157,255,0.2)"
			},
			// 类似于hover
			emphasis: {
				label: {
					show: false
				}
			},
			zlevel: 2
		},
		series: [
			{
				type: "map3D", //加载series数据
				map: nameMap,
				// 外边界颜色
				itemStyle: {
					color: "rgba(1, 16, 31, 0)",
					opacity: 1,
					borderColor: "#75f3f8",
					borderWidth: 1,
					shadowColor: "#3ffeff",
					shadowOffsetY: 15,
					shadowBlur: 8,
					areaColor: "rgba(5,21,35.0.1)"
				},

				label: {
					show: true,
					fontSize: 13,
					fontWeight: 600,
					opacity: 1,
					textStyle: {
						backgroundColor: "transparent", // 设置 label 背景透明
						color: "#ffffff", // 设置 label 文字颜色
						fontFamily: "YSBTH"
					}
				},
				// 设置3D视角的位置和朝向
				viewControl: {
					distance: 130, // 相机距离物体的距离
					alpha: 70, // 三维场景水平方向的旋转角度
					beta: 30 // 三维场景垂直方向的旋转角度
				},
				// 类似于hover,双击地图的区块或者点击,就是通过这个传递的值
				emphasis: {
					label: {
						formatter: function (params) {
							highlightObj.value = params;
							return params.name;
						},
						show: true,
						fontSize: 13,
						fontWeight: 600,
						opacity: 1,
						textStyle: {
							backgroundColor: "transparent", // 设置 label 背景透明
							color: "#fff", // 设置 label 文字颜色
							fontFamily: "YSBTH"
						}
					},
					itemStyle: {
						color: "#15ffff",
						opacity: 1,
						borderColor: "#62def5",
						borderWidth: 5
					}
				},
				// shading: 'color',
				zlevel: 3,
				// 数据
				data: regions,
				large: true
			}
		]
	};

	myChart.value.clear();
	// myChart.value.resize();
	myChart.value.setOption(optionMap);
	
	// 双击下钻
	myChart.value.getZr().on("dblclick", async res => {
		res.event.stopPropagation();
		// 因为我是父传子封装的组件,会涉及到有些地方是不允许下转的,这个值就是父传递过来是否允许下转的
		if (!propsList.allow) return;
		// 这儿是接收emphasis.label的信息,在这儿我就不贴出数据格式了,可以自己打印看看
		let params = highlightObj.value;
		// 这儿是获取你点击的那个区的信息
		let curData = mapData.features[params.dataIndex];
		// 如果是村一级不下钻(这是项目要求,如果没有这个要求,可以删除)
		if (currentMapLevel.value == 6) {
			return;
		}
		// 获取这个点击地方的区划号,因为我们后端要求的是字符串,所以我转了一下格式
		let code = curData.properties.adcode.toString();
		// 这儿是我根据后端需求,返回上一级需要区划号,所以我把我下转的区划号存在一个数组里
		runInHole.value.push(code);
		//  层级(省的层级对应2;市=>3;区=>4以此类推)
		let level = currentMapLevel.value;
		level++;
		// 这是发送请求,请求获取地图信息,可以在这里获取到了新的地图信息后重新渲染地图,调用封装的方法drawEcharts
		// 因为系统响应时长的问题,我是通过其他地方调用的,就不在这儿展示了
		await getMapData(1, 99, [code], level);
		// 这个是子传父,可以不要
		emit("getRegionList", {
			level: level,
			regions: mapList,
			curData
		});


	// 定义单击高亮的地图
	let colorActive = ref({
		num: -1,
		color: null
	});
	// 单击高亮
	myChart.value.getZr().on("click", () => {
		click_type = false;
		let params = highlightObj.value;
		// 层级
		let level = currentMapLevel.value;
		level++;

		setTimeout(() => {
			if (click_type != false) return;
			highlightName.value = params.name;
			let option = myChart.value.getOption();
			let list = option.geo3D[0].regions;

			if (list.length == 1) return;
			//找到选中的地图,并设置高亮
			let result = list.find(el => el.name === params.name);
			// 所在位置索引
			let resultIndex = list.findIndex(el => el.name === highlightName.value);
			// 将之前的高亮过区域换成原本的颜色
			if (colorActive.value.num >= 0) {
				option.series[0].data[colorActive.value.num].itemStyle = {
					color: colorActive.value.color
				};
			}
			// 存储点击区域的索引和原本的颜色
			colorActive.value.num = resultIndex;
			colorActive.value.color = option.series[0].data[resultIndex].itemStyle.color;

			if (resultIndex != -1) {
				highlightIndex.value = resultIndex;
			}
			// 设置高亮-以及高亮字体大小
			if (result) {
				option.series[0].data[resultIndex].itemStyle = {
					color: "#15eaff"
				};
				option.series[0].label.textStyle.fontSize = 13;

				if (myChart.value) {
					myChart.value.clear();
				}
				myChart.value.setOption(option);
			}
		}, 500);
	});
};

这个是手动区分,就看绿色框框的,feature.properties.num就是各个区人数
echarts3d地图点击区域变色,echarts,vue

mapData 的数据格式
echarts3d地图点击区域变色,echarts,vue文章来源地址https://www.toymoban.com/news/detail-827280.html

到了这里,关于echarts-gl的type为map3D修改不同区域的颜色和点击事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录下echarts Map3D地图渐变

    #记录下echarts Map3D地图底纹渐变的option echarts-gl模式下itemStyle.color: new echarts.graphic.LinearGradient实测渐变没有生效 在地图基础上,使用纹理着色效果来实现渐变效果,记录留档下 基础配置就不另外记了,注意下目前echarts上没有地图的json资源下载需要自行找下(比如百度,高德

    2023年04月12日
    浏览(33)
  • Echarts使用map3D+visualMap 实现地图下钻,区域高亮状态下变高

    想要实现3D地图省市区下钻,地图区域用不同颜色区分数值大小,当hover区域时,当前区域变高,点击下钻  js核心代码  mapData和cityData是另外引入const.js文件 html 我的地图是浙江省数据,省市json文件可以在下面链接自行下载 DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化

    2024年02月11日
    浏览(43)
  • echarts geo3D结合map3D 生成可以点击获取省份信息跳转到相应省份 且地图显示省份名称

    先讲下需求: 1.地图上显示各个省份的名称 2.对不同省份进行区分(项目涉及到省份排名之类的); 3. 点击进入不同省份 展示各个省份的市区信息; 4. 在省份地图上添加marker ; 1.中国地图使用geo3d 和scatter3D做文字图层,用map3d实现点击可以获取省份信息,如果单独使用geo

    2024年02月16日
    浏览(42)
  • ChatGPT工作提效之数据可视化大屏组件Echarts的实战方案(大数据量加载、伪3D饼图、地图各省cp中心坐标属性、map3D材质)

    ChatGPT工作提效之初探路径独孤九剑遇强则强 ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互) ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注

    2024年02月13日
    浏览(27)
  • 使用echarts-gl 绘制3D地球配置详解

    大屏可视化绘制关联配置绘制3D地球 为 ECharts 准备一个定义了宽高的 DOM 实例化 指定图表的配置项和数据

    2024年02月11日
    浏览(25)
  • vue使用echarts与echarts-gl实现3d地图与 3d柱状图

    目录 前言 一、下载echarts与echarts gl 二、vue引入与页面使用 1.引入 2.页面引入echarts-gl 三、下载地图数据 四、使用地图 1、html初始化地图放入位置: 2、data创建变量 3、创建地图 4、钩子函数渲染地图 5、渲染完成效果 总结 提示:本项目使用vue,请提前搭建好vue项目 本次需求

    2024年02月12日
    浏览(27)
  • vue中使用echarts与echarts-gl 实现3D饼图环形饼图

    注意:我不知道版本差异会不会有影响(可以指定版本 也可以借鉴我的) 指定版本命令 加个@后面跟版本号即可 成功之后可以在package.json中检查是否安装成功(如上图) 引入位置:我没有在main.js中全局引用,而是哪个页面用到就引入哪里 代码: 注意:我没有封装起来(你

    2024年02月03日
    浏览(30)
  • vue-使用echarts+echarts-gl实现某个省份地区地图3d可视化

    前言 最近在开发中遇到一个需求,需要把一个地区地图变成3d感觉悬浮在大屏中间配合业务需求 其实echarts配合三方库就可以实现这个效果,具体细节需要自己调整 代码实现 1.下载各省份各地区地图数据-json文件-根据需求下载对应地图json数据引入即可 最新全国地图JSON数据

    2024年01月20日
    浏览(41)
  • vue3.0 使用echarts与echarts-gl 实现可旋转,可放大3D饼图

    echarts与echarts-gl 实现3D饼图 实现效果: 旋转效果 缩放效果 实现步骤 1、安装echarts npm install echarts npm install echarts-gl 2、页面定义容器 3、js中引入echarts VUE 组件完整源码:

    2024年04月26日
    浏览(27)
  • echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题

    目录 先看实现效果:​编辑 步骤一 安装echarts和echarts-gl 步骤二  设置地图容器 在methods中设置初始化地图方法并在mounted中调用 在methods中设置初始化地图方法 在mounted中调用 打开页面效果:​编辑  步骤三 1、给地图添加双击事件dblclick 但是也出现了一个问题,和我们预想的

    2023年04月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包