在OpenLayer 3中,我使用'draw-feature' sample code they have on their website创建了一个Draw交互。
唯一的区别是我为Draw构造函数提供了自己的条件函数。
我想知道是否有办法在条件函数中确定交互/绘图是否已经开始?
基本上我的目标是略微改变行为,因此使用CTRL单击而不是单击来启动绘制框。但是只需点击一下就可以完成绘图。所以我的方法就是这样(在TypeScript中)
var condition = (e: ol.MapBrowserEvent): boolean => {
return (myDraw.isStarted() ? true : e.originalEvent['ctrlKey']);
}
据我所知,在OL Draw类中没有像isStarted()方法那样的东西。如果我有权访问内部成员,我会通过检查myDraw.sketchCoords_的长度来解决它(没有检查过这个但是如果0还没有启动绘图)。但我不想依赖私人成员,而且我正在使用缩小版本的OL,其中成员名称被转换。
答案 0 :(得分:0)
尝试这样的事情:
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;
});