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()
})
对图层添加要素事件进行监听,等待添加要素完成之后再执行操作。
在OpenLayers中监听draw事件清除图形时,由于异步问题导致清空无效。解决方法包括:1) 将clear操作设为异步,确保其在绘制完成后执行;2) 监听图层的添加要素事件,待添加完成后再执行清除操作。
783

被折叠的 条评论
为什么被折叠?



