控制在openlayers中绘制完成的时间

控制在openlayers中绘制完成的时间,openlayers,Openlayers,在openlayers中绘制多边形时,默认行为似乎是在再次单击第一个顶点或再次单击最后绘制的顶点时完成多边形。单击最后一个绘制的顶点时,是否仍有防止绘制完成的方法,以便完成绘制的唯一方法是再次单击多边形的第一个顶点?必须覆盖此方法 /** * Determine if an event is within the snapping tolerance of the start coord. * @param {ol.MapBrowserEvent} event Event. * @retu

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

必须覆盖此方法

/**
 * 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) {
此处,PotentialyFinishCoordinates变量包含“候选”点,用于确定最后一次单击是否为图形的“完成时”

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

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

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

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

重写内部私有方法从来都不是一个好主意。当你更新OpenLayers时,它会使你的应用程序中断。更好的做法是使用一个自定义条件来检查你是否单击了第一个点,并仅在这种情况下返回true。