OL3-如何知道绘图或交互是否已启动

OL3 - How to know if drawing or interaction is started

本文关键字:是否 启动 交互 何知道 绘图 OL3-      更新时间:2023-09-26

在OpenLayer 3中,我使用他们网站上的"Draw feature"示例代码创建了一个Draw交互。

唯一的区别是,我为Draw构造函数提供了自己的条件函数。

我想知道是否有办法在条件函数中确定交互/绘图是否已经开始

基本上,我的目标是稍微改变行为,这样绘制一个方框是用CTRL键而不是单击启动的。但是,只需单击即可结束绘图。所以我的方法是这样的(在TypeScript中)

var condition = (e: ol.MapBrowserEvent): boolean => {
    return (myDraw.isStarted() ? true : e.originalEvent['ctrlKey']);
}

据我所见,在OL Draw类中没有什么比isStarted()方法更好的了。如果我有权访问内部成员,我会通过检查myDraw.sketchCoords_的长度来解决它(尚未检查此项,但如果为0,则图形尚未启动)。但我不想依赖私人成员,而且我使用的是OL的缩小版,其中成员的名字是转换的。

试试这样的东西:

var start_drawing = false;
function drawCondition(evt){
    var ctrl = ol.events.condition.platformModifierKeyOnly(evt);
    // this should be ol.events.condition.click
    // but for some reason always returns false
    var click = evt.type == 'pointerdown';
    // to finish draw with click
    if(start_drawing) return click;
    // start drawing only with Ctrl + click    
    return ctrl && click;
}
// draw is a reference to ol.interaction.Draw
draw.on('drawstart', function(evt){
    start_drawing = true;
});
draw.on('drawend', function(evt){
    start_drawing = false;
});