【问题标题】:Open Layers 3 - Initialize Draw Interaction with first node on LineString打开第 3 层 - 使用 LineString 上的第一个节点初始化绘制交互
【发布时间】:2016-03-11 16:02:11
【问题描述】:

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

这是一个小提琴:Sample

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

    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并且已经以编程方式设置了第一个节点,而不必先点击地图?

【问题讨论】:

  • 前段时间我非常绝望,使用 ol3 私有方法 startDrawing_() 做到了。如果你有兴趣,我可以分享我的代码。
  • 是的,我很想知道你是如何做到这一点的,因为它对我的目的来说是一个至关重要的功能。

标签: openlayers-3


【解决方案1】:

目前无法手动将点附加到 OpenLayers 3 ol.interaction.Draw,但能够支持它是有意义的(在我看来)。就像用户点击了一样。

您应该向发送此邮件的 OL3 开发人员询问有关添加此类功能的信息,以了解他们对此有何看法。如果他们同意并且您愿意为此工作,您可以提供拉取请求。见:https://groups.google.com/forum/#!forum/ol3-dev

【讨论】:

  • 感谢这个想法听起来很诱人(只是查看了源代码)。我不确定将现有几何注入到 Draw 构造函数的这种场景的一般用途,但这对于我拥有的用例来说非常重要。我还有一些其他问题,比如在绘图模式下拦截点击事件。需要更全面地了解最佳解决方案。
  • 当然。不要犹豫,在 ol3-dev 论坛上讨论这个问题。 OL3 核心开发人员可能对此事有很好的看法。干杯。
【解决方案2】:

如果你不介意在 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

【讨论】:

  • 谢谢你,这就像一个魅力!想坚持原来的代码,但也许你的修复向我展示了一种以干净的方式将它实现到 OL3 中的方法(如果开发人员想要的话)——现在需要弄清楚,如何防止完成绘图,只要因为没有选择有效的目标特征
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
相关资源
最近更新 更多