echarts:map3D如何设置不同的symbol

这篇具有很好参考价值的文章主要介绍了echarts:map3D如何设置不同的symbol。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇文章我们处理了map3D散点图的点击问题,发现只有一个散点的时候,点击会失效,把所有数据放在一个散点图里就可以了,那么新的问题又来了,所有数据都放一块了,该如何根据数据设置不同的symbol,这种需求很常见,比如这12条数据可以分成医院、学校和宾馆三类,每一类使用不同的symbol,但是翻看了文档,scatter3D的symbol并不支持回调函数,想要分别给散点设置symbol,那就得用循环来设置,但是使用循环设置的话,每张散点图上只有一条数据,点击又会失效……

echarts地图图标自定义动画,echarts,echarts,前端,javascript

解决思路:

既然只有一个散点的图不能点,那就设置两张散点图,第一张散点图包含所有的数据,但是他们的symbol设置为none,相当于做一个底图,另外利用循环生成N张散点图,每张图只有一条数据,每张图可以分别设置symbol,看上去点击的是一个symbol,但其实响应的是那个symbol为none的图表。

代码:

<template>
	<div>
		<div id="map" style="width: 100%;height: 500px;"></div>
	</div>
</template>

<script>
	import * as echarts from 'echarts'
	import 'echarts-gl'
	import mapJson from '@/assets/map/json/province/shanghai.json'
	import scatterData from '@/assets/scatterData.json'
	export default {
		data() {
			return {
				myChart: null,
				//echart 配制option  
				options: {
					tooltip: {
						// show: true,
						trigger: 'item',
						formatter: function(params, ticket, callback) {
							let name = params.name;
							return name;
						},
					},
					geo3D: {
						map: 'shanghai',
						regionHeight: 5, // 模型的高度
						shading: 'lambert',
						boxWidth: 120, // 三维地图在三维场景中的宽度
						boxDepth: 90, // 三维地图在三维场景中的深度
						bottom: '10%',
						label: { // 标签的相关设置
							show: false, // (地图上的城市名称)是否显示标签 [ default: false ]
							position: ['50%', '50%'],
							distance: 50, // 标签距离图形的距离,在三维的散点图中这个距离是屏幕空间的像素值,其它图中这个距离是相对的三维距离
							// 标签内容格式器
							formatter: (params) => {
								return params.name
							},
							emphasis: {
								// 对应的鼠标悬浮效果
								show: false,
								textStyle: {
									fontSize: 18,
									color: '#FFF'
								}
							},
							textStyle: { // 标签的字体样式
								color: '#000', // 地图初始化区域字体颜色
								fontSize: 10, // 字体大小
								opacity: 1, // 字体透明度
								backgroundColor: '#fff' // 字体背景色
							}
						},
						itemStyle: { // 三维地理坐标系组件 中三维图形的视觉属性,包括颜色,透明度,描边等。
							color: 'rgba(32,101,200,0.5)', // 地图板块的颜色
							opacity: 1, // 图形的不透明度 [ default: 1 ]
							borderWidth: 3, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域 [ default: 0 ]
							borderColor: 'rgba(23,146,202,.1)' // 图形描边的颜色。[ default: #333 ]
						},
						emphasis: { // 鼠标 hover 高亮时图形和标签的样式 (当鼠标放上去时 label和itemStyle 的样式)
							// 鼠标移上去的样式
							borderWidth: 1,
							borderColor: '#1792CA',
							color: '#0058B8',
							textStyle: {
								color: '#1792CA'
							},
							label: { // label高亮时的配置
								show: false,
								textStyle: {
									color: '#fff', // 高亮时标签颜色变为 白色
									backgroundColor: 'rgba(0,0,0,0.4)',
									padding: 10,
									fontSize: 10 // 高亮时标签字体 变大
								}
							},
							itemStyle: { // itemStyle高亮时的配置
								areaColor: '#66ffff' // 高亮时地图板块颜色改变
							}
						},

						light: { // 光照相关的设置。在 shading 为 'color' 的时候无效。 光照的设置会影响到组件以及组件所在坐标系上的所有图表。合理的光照设置能够让整个场景的明暗变得更丰富,更有层次。
							main: { // 场景主光源的设置,在 globe 组件中就是太阳光。
								// color: '#fff', //主光源的颜色。[ default: #fff ]
								intensity: 1, // 主光源的强度。[ default: 1 ]
								shadow: true, // 主光源是否投射阴影。默认关闭。 开启阴影可以给场景带来更真实和有层次的光照效果。但是同时也会增加程序的运行开销。
								// shadowQuality: 'high', // 阴影的质量。可选'low', 'medium', 'high', 'ultra' [ default: 'medium' ]
								alpha: 150, // 主光源绕 x 轴,即上下旋转的角度。配合 beta 控制光源的方向。[ default: 40 ]
								beta: 70 // 主光源绕 y 轴,即左右旋转的角度。[ default: 40 ]
							},
							ambient: { // 全局的环境光设置。
								color: '#fff', // 环境光的颜色。[ default: #fff ]
								intensity: 0.5 // 环境光的强度。[ default: 0.2 ]
							}
						},
						groundPlane: {
							show: false,
							color: '#9dcaff'
						}
					}
				}
			}
		},
		methods: {
			//初始化中国地图
			initEchartMap() {
				let mapDiv = document.getElementById('map');
				if (this.myChart != null && this.myChart != "" && this.myChart != undefined) {
					this.myChart.dispose();
				}
				this.myChart = echarts.init(mapDiv);
				echarts.registerMap('shanghai', mapJson);
				this.options.series = this.getScatter(scatterData);
				this.myChart.setOption(this.options);
				this.myChart.on('click', function(args) {
					console.log(args);
				});
			},
			getScatter(data) {
				var reuslt = [];
				let hospital =
					'path://M643.2 902H380.8V643.2H122V380.8h258.8V122h262.4v258.8H902v262.4H643.2V902z m-218.7-43.7h175V599.5h258.8v-175H599.5V165.7h-175v258.8H165.7v175h258.8v258.8z';
				let school =
					'path://M945.4 383.3l-399-204.6c-23.7-12.1-51.9-12.1-75.5 0.2L77.2 383.4c-9.8 5.1-15.8 15.1-15.8 26.1 0 11 6.1 21 15.8 26.1l37.5 19.5v193.5c-14.8 8.3-25 24-25 42.2 0 26.8 21.7 48.5 48.5 48.5s48.5-21.7 48.5-48.5c0-18.2-10.1-33.9-25-42.2v-169l104.5 54.3V746c0 25.7 16.5 48.2 41 56L432 841.7c25.6 8.1 52 12.2 78.3 12.2 25.3 0 50.6-3.7 75.2-11.2l134.1-40.8c24.8-7.6 41.6-30.1 41.7-56l0.8-216.2 183.3-94c9.9-5.1 16-15.1 16-26.1-0.1-11.2-6.2-21.2-16-26.3zM714.2 745.7c0 5.2-3.4 9.7-8.3 11.2l-134.1 40.8c-41.2 12.5-84.6 12.2-125.7-0.8l-124.7-39.6c-4.9-1.6-8.2-6.1-8.2-11.2v-188L470.9 640c11.9 6.2 24.9 9.3 37.9 9.3 12.9 0 25.8-3 37.6-9.1l168.5-86.4-0.7 191.9zM525 598.4c-10.1 5.2-22.2 5.2-32.3-0.1L129 409.4l363.6-188.8c10.1-5.3 22.2-5.3 32.3-0.1l368.4 188.9-368.3 189z';
				let hotel =
					'path://M405.333333 436.906667A190.72 190.72 0 0 0 512 469.333333a106.666667 106.666667 0 0 1 106.666667 106.666667v170.666667a106.666667 106.666667 0 0 1-213.333334 0V436.906667M512 85.333333a192 192 0 0 0-192 192v469.333334a192 192 0 0 0 384 0v-170.666667a192 192 0 0 0-192-192 106.666667 106.666667 0 1 1 106.666667-106.666667h85.333333a192 192 0 0 0-192-192z';
				var symbolList = [];
				symbolList.push(hospital);
				symbolList.push(school);
				symbolList.push(hotel);
				// var symbolList = ['circle', 'pin', 'diamond']
				data.forEach(item => {
					// 每个散点图的通用设置
					let seriesItem = {
						type: 'scatter3D',
						coordinateSystem: 'geo3D',
						symbolSize: 30,
						zlevel: 99,
						geo3DIndex: 0,
						regionHeight: 5, // 模型的高度
						shading: 'lambert',
						boxWidth: 120, // 三维地图在三维场景中的宽度
						boxDepth: 90, // 三维地图在三维场景中的深度
						silent: true,
						itemStyle: {
							color: function(params) {
								var colorList = ['#00aa00', '#ff5500', '#55aaff']
								return colorList[params.data.type - 1];
							}
						}
					};
					// 根据item的内容来决定散点symbol
					// itemstyle可以直接用回调函数写就行了,
					// 但是symbol不支持回调函数,所以只能用for循环来设置
					seriesItem.symbol = symbolList[item.type - 1];
					seriesItem.data = [item];
					reuslt.push(seriesItem);
				});
				// 全数据散点图,无图标,只有数据
				// 经过试验,鼠标响应的是全数据的这张散点图
				// 很多网友反馈,当散点图只有一个点的时候,鼠标不响应
				let seriesItem = {
					type: 'scatter3D',
					coordinateSystem: 'geo3D',
					symbol:'none',
					symbolSize: 50,
					zlevel: 9,
					geo3DIndex: 0,
					regionHeight: 5, // 模型的高度
					shading: 'lambert',
					boxWidth: 120, // 三维地图在三维场景中的宽度
					boxDepth: 90, // 三维地图在三维场景中的深度
					silent: false,
					data:data
				};
				reuslt.push(seriesItem);
				return reuslt;
			}
		},
		created() {

		},

		mounted() {
			this.$nextTick(() => {
				this.initEchartMap();
			})

		}
	};
</script>

<style>

</style>

 scatterData.json的内容:

[{
		"type": 1,
		"status": 0,
		"name": "上海市卫生监督所",
		"value": [121.478481, 31.402116, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "瑞金医院",
		"value": [121.263544, 31.378035, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海市肺科医院",
		"value": [121.502006, 31.301688, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海市东方医院",
		"value": [121.512287, 31.237613, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海交通大学医院",
		"value": [121.522361, 31.206991, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海市卫健委应急办",
		"value": [121.531758, 31.269437, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海市精神卫生中心",
		"value": [121.44806, 31.187265, 50]
	},
	{
		"type": 1,
		"status": 0,
		"name": "上海市疾病预防控制中心",
		"value": [121.417922, 31.193355, 50]
	},
	{
		"type": 2,
		"status": 0,
		"name": "上海外贸松江校区",
		"value": [121.217376, 31.046053, 50]
	},
	{
		"type": 3,
		"status": 0,
		"name": "金山山阳中学",
		"value": [121.367352, 30.760275, 50]
	},
	{
		"type": 2,
		"status": 1,
		"name": "南郊宾馆",
		"value": [121.483558, 30.925426, 50]
	}

]

效果图:

echarts地图图标自定义动画,echarts,echarts,前端,javascript文章来源地址https://www.toymoban.com/news/detail-628032.html

到了这里,关于echarts:map3D如何设置不同的symbol的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Echarts使用map3D+visualMap 实现地图下钻,区域高亮状态下变高

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

    2024年02月11日
    浏览(60)
  • echarts + echarts-gl - 使用geo3d + map3d + scatter3D做3d地图

    一、使用插件 echarts@5.2.2 、 echarts-gl@2.0.8 、 jquery ; jquery 是使用 ajax 加载 json 文件的。 二、准备地图json文件 因为找了一圈,网上的地图 js 文件都需要花钱去购买, json 文件可以在阿里云数据可视化平台下载,下载链接为:免费地图json文件下载 ECharts 提供了两种格式的地图数

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

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

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

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

    2024年02月13日
    浏览(41)
  • echarts地图不同地区设置不同的颜色

    var myChart = ec.init(document.getElementById(\\\'main\\\')); let option = { tooltip: { trigger: \\\'item\\\', }, dataRange: {//左下角的颜色块。start:值域开始值;end:值域结束值;label:图例名称;color:自定义颜色值 x: \\\'left\\\', y: \\\'bottom\\\', show:false, splitList: [ // 此处根据下方data中的value值来显示不同的颜色 {start:

    2024年02月02日
    浏览(78)
  • vue echarts 3D地球和世界地图的实现,并且显示不同国家的数据

    别忘记给#earth元素设置宽高 效果如下图 别忘记给#world元素设置宽高 其中注意点是world.js 下载地址 下载完成以后需要对其进行改变一下,原本是他是放在一个匿名自执行函数里面,直接在vue里面引用会报错,要把他变成 export 对象,代码片段实例 效果如下图 关键点在globe里面

    2024年02月04日
    浏览(52)
  • echarts如何实现3D饼图(环形图)?

    一、实现的效果 二、具体步骤 1.安装依赖 npm install echarts  2.引入echarts import * as echarts from \\\'echarts\\\';  注意:这里需要用到echarts-gl,必须单独引入才可以 import \\\'echarts-gl\\\'; 3.echarts部分代码 我知道这部分内容很多,但只要cv去用就可以了, getParametricEquation 这个函数不用改(我也不

    2024年03月28日
    浏览(81)
  • 【echarts】如何将iconfont转换成echart所需的path路径 echarts折线图、柱状图如何设置自定义svg图标

    步骤 下载iconfont图标到本地,用浏览器打开,右键查看源代码,或者用开发IDE软件打开,找到 path d=... ,这个就是我们要传递给echart的icon的值。 代码示例:

    2024年02月09日
    浏览(45)
  • Git不同项目如何设置不同的账号

    Git可以配置全局的账号、以及针对每个项目配置不同的账号,如果项目里未单独配置,就会使用全局的账号 1、右键【Git Bash Here】打开Git命令行 2、输入命令: git config --global --list 查看全局配置 user.name=xxxx user.email= xxxx@xxx.com 方法一: 打开命令行、输入如下命令设置全局账号

    2024年02月15日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包