openlayers绘制图形后清空图形要素失败

在OpenLayers中监听draw事件清除图形时,由于异步问题导致清空无效。解决方法包括:1) 将clear操作设为异步,确保其在绘制完成后执行;2) 监听图层的添加要素事件,待添加完成后再执行清除操作。
let draw = new Draw({
	source:source,
    type:'Circle',
    freehand:false,
    geometryFunction: createBox(),
})
map.addInteraction(draw);
draw.on("drawend", function(e){
	v.map.removeInteraction(draw)
	drawsource.clear()
})

对draw进行监听,绘制结束后清空图层要素。但是实际上并没有达到想要的效果,这是因为监听事件是一个异步的过程,在draw没有完成之前,就已经执行了clear操作。
解决方案一:将clear设置为异步代码

draw.on("drawend", function(e){
	v.map.removeInteraction(draw);
	setTimeout(()=>{
		drawsource.clear()
	}, 0)
})

clear设置为异步操作后,会和监听事件一起作为异步事件进行异步队列排队。并且监听事件优于clear操作,这样即使设置的延迟时间为0,绘制结束后也会清空图层要素。
解决方案二:

source.on("addfeature", function(e){
	v.map.removeInteraction(draw);
	drawsource.clear()
})

对图层添加要素事件进行监听,等待添加要素完成之后再执行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值