diff --git a/src/ol/source/vectorfilesource.js b/src/ol/source/vectorfilesource.js index 8e82084814..865f647e55 100644 --- a/src/ol/source/vectorfilesource.js +++ b/src/ol/source/vectorfilesource.js @@ -106,20 +106,17 @@ ol.source.VectorFile.prototype.readFeatures_ = function(source) { var format = this.format; var features = format.readFeatures(source); var featureProjection = format.readProjection(source); - var transform; if (!ol.proj.equivalent(featureProjection, this.reprojectTo_)) { - transform = ol.proj.getTransform(featureProjection, this.reprojectTo_); - } else { - transform = null; - } - var i, ii; - for (i = 0, ii = features.length; i < ii; ++i) { - var feature = features[i]; - var geometry = feature.getGeometry(); - if (!goog.isNull(geometry) && !goog.isNull(transform)) { - geometry.transform(transform); + var transform = ol.proj.getTransform(featureProjection, this.reprojectTo_); + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + var feature = features[i]; + var geometry = feature.getGeometry(); + if (!goog.isNull(geometry)) { + geometry.transform(transform); + } } - this.addFeature(feature); } + this.addFeaturesInternal(features); this.setState(ol.source.State.READY); }; diff --git a/src/ol/source/vectorsource.exports b/src/ol/source/vectorsource.exports index cc76d95621..1b55238538 100644 --- a/src/ol/source/vectorsource.exports +++ b/src/ol/source/vectorsource.exports @@ -1,5 +1,6 @@ @exportSymbol ol.source.Vector @exportProperty ol.source.Vector.prototype.addFeature +@exportProperty ol.source.Vector.prototype.addFeatures @exportProperty ol.source.Vector.prototype.getClosestFeatureToCoordinate @exportProperty ol.source.Vector.prototype.forEachFeature @exportProperty ol.source.Vector.prototype.getAllFeatures diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js index 11079daf57..a69c70ca6d 100644 --- a/src/ol/source/vectorsource.js +++ b/src/ol/source/vectorsource.js @@ -63,11 +63,7 @@ ol.source.Vector = function(opt_options) { this.featureChangeKeys_ = {}; if (goog.isDef(options.features)) { - var features = options.features; - var i, ii; - for (i = 0, ii = features.length; i < ii; ++i) { - this.addFeature(features[i]); - } + this.addFeaturesInternal(options.features); } }; @@ -78,6 +74,17 @@ goog.inherits(ol.source.Vector, ol.source.Source); * @param {ol.Feature} feature Feature. */ ol.source.Vector.prototype.addFeature = function(feature) { + this.addFeatureInternal(feature); + this.dispatchChangeEvent(); +}; + + +/** + * Add a feature without firing a `change` event. + * @param {ol.Feature} feature Feature. + * @protected + */ +ol.source.Vector.prototype.addFeatureInternal = function(feature) { var featureKey = goog.getUid(feature) + ''; goog.asserts.assert(!(featureKey in this.featureChangeKeys_)); this.featureChangeKeys_[featureKey] = goog.events.listen(feature, @@ -91,16 +98,42 @@ ol.source.Vector.prototype.addFeature = function(feature) { } this.dispatchEvent( new ol.source.VectorEvent(ol.source.VectorEventType.ADDFEATURE, feature)); +}; + + +/** + * @param {Array.