Openlayers 3 打开图层3-初始化与LineString上第一个节点的绘图交互

Openlayers 3 打开图层3-初始化与LineString上第一个节点的绘图交互,openlayers-3,Openlayers 3,我有一张地图,用户可以在地图上选择某个对象/特征,然后画一条到另一个对象/特征的线。当用户选择特征时,我想添加一个绘图交互,并已将第一个点设置为所选特征,而无需用户再次单击地图 这是一把小提琴: 按下draw按钮后,应以编程方式执行下面的注释代码,而无需用户交互 geometryFunction: function (c, g) { if (goog.isDef(g)) { g.setCoordinates(c); } else {

我有一张地图,用户可以在地图上选择某个对象/特征,然后画一条到另一个对象/特征的线。当用户选择特征时,我想添加一个绘图交互,并已将第一个点设置为所选特征,而无需用户再次单击地图

这是一把小提琴:

按下draw按钮后,应以编程方式执行下面的注释代码,而无需用户交互

    geometryFunction: function (c, g) {
        if (goog.isDef(g)) {
            g.setCoordinates(c);
        } else {
            // DO THIS AUTOMATICALLY ON PRESSING DRAW
            // TO INITIALIZE AND START THE DRAWING PROCESS
            c[0][0] = 1174072.754460305;
            c[0][1] = 332653.94709708635;
            g = new ol.geom.LineString(c);
        }
        ...
    }
当前的行为是单击Draw按钮,然后可以单击地图开始绘制(但我用所需的起始位置覆盖第一个节点——在本例中,位于中部非洲附近)


是否可以单击Draw,并且第一个节点已通过编程设置,而不必先单击map?

目前无法手动向OpenLayers 3
ol.interaction.Draw添加点,但在我看来,能够支持它是有意义的。这将是“仿佛”用户点击了


您应该询问OL3开发人员关于添加这样一个特性的问题,看看他们是怎么想的。如果他们同意,并且您愿意处理此问题,您可以提供拉取请求。请参阅:

如果您不介意在OL中使用私有方法,您可以这样做来实现您想要的

var event = $.Event('click'); //create a click event in your draw method using JQuery 
event.coordinate = [1174072.754460305,332653.94709708635];// set your starting coordinate
draw_interaction.startDrawing_(event);// tell your interaction to start drawing

谢谢,这个想法听起来很诱人(只是看了一下源代码)。我不确定这种将现有几何体注入绘制构造函数的场景是否有用,但这对于我的用例来说非常重要。我还有一些其他问题,比如在draw模式下拦截click事件。需要有一个更大的图景来找出最好的解决方案。当然。不要犹豫,在ol3开发论坛上讨论这个问题。OL3核心开发人员可能对此事有很好的意见。干杯。不久前,我非常绝望,使用ol3私有方法startDrawing(()。如果你感兴趣,我可以分享我的代码。是的,我会非常感兴趣你是如何做到这一点的,因为这是一个至关重要的功能,我的目的。谢谢你,这就像一个魅力!希望坚持原始代码,但可能您的修复程序向我展示了一种方法,可以以干净的方式将其实现到OL3中(如果开发人员需要)——现在需要弄清楚,只要未选择有效的目标功能,如何防止完成绘图