Echarts 实现map地图多个“label”弹框,

在这里插入图片描述
话不多说,看设计图就知道,需要实现地图打点,并且实时弹出警情信息弹框,看echarts API都知道地图打点很容易实现,问题是实现多个弹框,本来准备使用label加载动态dom标签实现,看API发现label的formatter并不支持html标签,当然,自带的rich也可以实现上图样式,但是关键label没法点击,于是就想使用toolip实现,然后发现toolip只能实现一个弹框,而且位置也没法准确定位到maker上。
经过上边的思考,我突发奇想,把地理坐标转换成屏幕坐标,再动态创建标签定位过去怎么样,事实证明,是可行,于是开始我们的搬砖之路。
多余的话就不说了,这里的重点主要是实现echarts地理坐标转换成屏幕坐标,这里的屏幕的坐标是从地图的父元素开始计算的。
经纬度坐标与屏幕坐标转换:

	convertMain(Lng,lat){
							let getModel = this.myChart.getModel().getSeries()[1];
							let seriesModel = this.myChart.getModel().getSeriesByIndex(0)
							let coordSys = seriesModel.coordinateSystem;
							let point = coordSys.dataToPoint([Lng, lat]);
							return point;
						},
顺便奉上个echarts屏幕自适应的函数:
FontSize(res) {
				let docEl = document.documentElement,
					clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
				if (!clientWidth) return;
				let fontSize = 100 * (clientWidth / 1920);
				return res * fontSize;
			
			},

使用方法:

this.option.series[0].label.normal.fontSize = this.FontSize(0.1);

这里传值需要除以100;字号是10就写

this.FontSize(0.1);

亲自测试这里的图表(适应所有图表,谁用谁知道)屏幕自适应兼容到800*600问题不大。
另外上述的设计弹框直接自己html写好就可以,然后通过获取的屏幕坐标相对父元素进行定位即可。
在这里插入图片描述
事实证明,位置对应还是相当准的。当然,如果各位道友有更好的方法,也可以一起分享一下。

猜你喜欢

转载自blog.csdn.net/weixin_43998604/article/details/105994329