diff --git a/src/ol/interaction/snapinteraction.js b/src/ol/interaction/snapinteraction.js index 898bd0d15a..9eca618070 100644 --- a/src/ol/interaction/snapinteraction.js +++ b/src/ol/interaction/snapinteraction.js @@ -27,8 +27,8 @@ goog.require('ol.structs.RBush'); /** * @classdesc * Handles snapping of vector features while modifying or drawing them. The - * features can come from a {@link ol.source.Vector}, a {@link ol.Collection} - * or a plain array. Any interaction object that allows the user to interact + * features can come from a {@link ol.source.Vector} or {@link ol.Collection} + * Any interaction object that allows the user to interact * with the features using the mouse can benefit from the snapping, as long * as it is added before. * @@ -94,6 +94,15 @@ ol.interaction.Snap = function(opt_options) { */ this.indexedFeaturesExtents_ = {}; + /** + * If a feature geometry changes while a pointer drag|move event occurs, the + * feature doesn't get updated right away. It will be at the next 'pointerup' + * event fired. + * @type {Object.} + * @private + */ + this.pendingFeatures_ = {}; + /** * Used for distance sorting in sortByDistance_ * @type {ol.Coordinate} @@ -154,7 +163,8 @@ ol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) { var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()]; if (goog.isDef(segmentWriter)) { var feature_uid = goog.getUid(feature); - this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(); + this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent( + ol.extent.createEmpty()); segmentWriter.call(this, feature, geometry); if (listen) { @@ -174,16 +184,6 @@ goog.exportProperty( ol.interaction.Snap.prototype.addFeature); -/** - * If a feature geometry changes while a pointer drag|move event occurs, the - * feature doesn't get updated right away. It will be at the next 'pointerup' - * event fired. - * @type {Object.} - * @private - */ -ol.interaction.Snap.prototype.pendingFeatures_ = null; - - /** * @param {ol.Feature} feature Feature. * @private @@ -602,9 +602,11 @@ ol.interaction.Snap.handleEvent_ = function(evt) { * @private */ ol.interaction.Snap.handleUpEvent_ = function(evt) { - goog.array.forEach(goog.object.getValues(this.pendingFeatures_), - this.updateFeature_, this); - this.pendingFeatures_ = {}; + var featuresToUpdate = goog.object.getValues(this.pendingFeatures_); + if (featuresToUpdate.length) { + goog.array.forEach(featuresToUpdate, this.updateFeature_, this); + this.pendingFeatures_ = {}; + } return false; };