openlayers如何使用(五)叠加层的应用

在地图中最常见的功能就是点击出现弹出框来展示信息,这个功能是怎么实现的呢?
弹出框使用的方法就是地图中的叠加层(overlay)
① 创建叠加层
我们将叠加层使用组件的方法引入到地图页面中来

// 点元素叠加层
<MapData ref="mapData" :mapData = "this.mapData"/>
// 线元素叠加层
<MapDataLine ref="mapData_Line" :mapData = "this.mapData"/>

② 传值
传值就是最基础的父子组件的传值,在子组件中去接收,注意定义接受的数据类型

props:{
	mapData:Object,
},

传好值后我们就要去创建叠加层了

③ 创建叠加层

// 设置节点弹框位置
setInfoPosition(points){
	// 设置显示坐标
	let position = fromLonLat([points.Longitude,points.Latitude]);
	this.mapOverlay.setPosition(position);
},
// 创建叠加层
addOverlay() {
	const overlay = new Overlay({
		element: this.$refs.mapData.$el, // 绑定元素的dom
		autoPan: true,
		autoPanAnimation: {
			duration: 250,
		},
	});
	// 设置初始位置,undefined则为不显示
	overlay.setPosition(undefined);
	this.mapOverlay = overlay;
	// 将叠加层加入地图中
	this.map.addOverlay(overlay);
},

创建好叠加层后,初始的状态是不显示的,我们只需要在元素对应的事件中去调用一下这个方法即可显示叠加层

④ 在事件中应用

mapPointsClick: function (feature) {
	let points = feature.get("points");
	if (points.Type != 3) {
		// 点击显示在该点的坐标处
		this.setInfoPosition(points);
		this.mapLineOverlay.setPosition(undefined);
	}
	this.mapData = points;
	console.log('click', feature);
	if (feature.values_.points.Type === 3) {
		return;
	} else {
		// 这里我掉了一个接口将叠加层中展示的数据进行转义
		Api.getdetail('point',feature.values_.points.Code).then(res=>{
			this.mapData = JSON.parse(res.Data).Detail
		})
	}
},

⑤ 点击其他位置隐藏弹框
在点击元素时显示弹框,点击其他地方是应隐藏弹框
只需要在创建事件的时候多加一步判断即可

// 点击元素本身
if (feature) {
	let execName = featureObj.typeJudge(feature) + "Click";
	featureObj[execName].apply(that, [feature]);
	feature.set('mouse',coordinate)
	// else就是点击非元素单位,向setPosition传入undefined即可隐藏
} else {
	that.mapOverlay.setPosition(undefined);
	that.mapLineOverlay.setPosition(undefined);
}

这样就完成了点击显示弹出框的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐加冰^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值