【问题标题】:Controlling when drawing finishes in openlayers控制何时在 openlayers 中完成绘图
【发布时间】:2017-08-22 20:59:05
【问题描述】:

在 openlayers 中绘制多边形时,默认行为似乎是在再次单击第一个顶点或再次单击绘制的最后一个顶点时完成多边形。是否有办法阻止单击最后一个绘制的顶点时绘制完成,以便完成绘制的唯一方法是再次单击多边形的第一个顶点?

【问题讨论】:

    标签: openlayers


    【解决方案1】:

    我最终通过将绘制交互的 finishCondition 设置为 ol.events.condition.never 来实现这一点。然后我检查我是否点击了我绘制的第一个点,在这种情况下我调用了 finishDrawing() 函数。

    【讨论】:

    • 更好的是使用自定义条件来检查您是否单击了第一个点,并且仅在这种情况下返回 true。
    【解决方案2】:

    你必须重写这个方法

    /**
     * Determine if an event is within the snapping tolerance of the start coord.
     * @param {ol.MapBrowserEvent} event Event.
     * @return {boolean} The event is within the snapping tolerance of the start.
     * @private
     */
    ol.interaction.Draw.prototype.atFinish_ = function(event) {
    

    这里,potentialFinishCoordinates 变量包含“候选”点,用于确定最后一次点击是否是“完成”绘图。

    对于多边形情况,该变量包含第一个和最后一个绘制点。

    potentiallyFinishCoordinates = [this.sketchCoords_[0][0],
            this.sketchCoords_[0][this.sketchCoords_[0].length - 2]];
    

    尝试删除该数组的第二个元素。

    【讨论】:

    • 覆盖内部私有方法绝不是一个好主意。当你更新 OpenLayers 时,它会让你的应用崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多