diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js
index 9e036b52cf..78555072bb 100644
--- a/src/ol/source/vectorsource.js
+++ b/src/ol/source/vectorsource.js
@@ -48,7 +48,7 @@ ol.source.VectorEventType = {
/**
* @classdesc
- * Base class for vector sources.
+ * Provides a source of features for vector layers.
*
* @constructor
* @extends {ol.source.Source}
@@ -109,7 +109,10 @@ goog.inherits(ol.source.Vector, ol.source.Source);
/**
- * @param {ol.Feature} feature Feature.
+ * Add a single feature to the source. If you want to add a batch of features
+ * at once, call {@link ol.source.Vector#addFeatures source.addFeatures()}
+ * instead.
+ * @param {ol.Feature} feature Feature to add.
* @api stable
*/
ol.source.Vector.prototype.addFeature = function(feature) {
@@ -155,7 +158,8 @@ ol.source.Vector.prototype.addFeatureInternal = function(feature) {
/**
- * @param {Array.
} features Features.
+ * Add a batch of features to the source.
+ * @param {Array.} features Features to add.
* @api stable
*/
ol.source.Vector.prototype.addFeatures = function(features) {
@@ -179,7 +183,7 @@ ol.source.Vector.prototype.addFeaturesInternal = function(features) {
/**
- * Remove all features.
+ * Remove all features from the source.
* @api stable
*/
ol.source.Vector.prototype.clear = function() {
@@ -194,32 +198,43 @@ ol.source.Vector.prototype.clear = function() {
/**
- * @param {function(this: T, ol.Feature): S} f Callback.
- * @param {T=} opt_this The object to use as `this` in `f`.
- * @return {S|undefined}
+ * Iterate through all features on the source, calling the provided callback
+ * with each one. If the callback returns any "truthy" value, iteration will
+ * stop and the function will return the same value.
+ *
+ * @param {function(this: T, ol.Feature): S} callback Called with each feature
+ * on the source. Return a truthy value to stop iteration.
+ * @param {T=} opt_this The object to use as `this` in the callback.
+ * @return {S|undefined} The return value from the last call to the callback.
* @template T,S
* @api stable
*/
-ol.source.Vector.prototype.forEachFeature = function(f, opt_this) {
- return this.rBush_.forEach(f, opt_this);
+ol.source.Vector.prototype.forEachFeature = function(callback, opt_this) {
+ return this.rBush_.forEach(callback, opt_this);
};
/**
+ * Iterate through all features whose geometries contain the provided
+ * coordinate, calling the callback with each feature. If the callback returns
+ * a "truthy" value, iteration will stop and the function will return the same
+ * value.
+ *
* @param {ol.Coordinate} coordinate Coordinate.
- * @param {function(this: T, ol.Feature): S} f Callback.
- * @param {T=} opt_this The object to use as `this` in `f`.
- * @return {S|undefined}
+ * @param {function(this: T, ol.Feature): S} callback Called with each feature
+ * whose goemetry contains the provided coordinate.
+ * @param {T=} opt_this The object to use as `this` in the callback.
+ * @return {S|undefined} The return value from the last call to the callback.
* @template T,S
*/
ol.source.Vector.prototype.forEachFeatureAtCoordinate =
- function(coordinate, f, opt_this) {
+ function(coordinate, callback, opt_this) {
var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];
return this.forEachFeatureInExtent(extent, function(feature) {
var geometry = feature.getGeometry();
goog.asserts.assert(goog.isDefAndNotNull(geometry));
if (geometry.containsCoordinate(coordinate)) {
- return f.call(opt_this, feature);
+ return callback.call(opt_this, feature);
} else {
return undefined;
}
@@ -228,16 +243,26 @@ ol.source.Vector.prototype.forEachFeatureAtCoordinate =
/**
+ * Iterate through all features whose bounding box intersects the provided
+ * extent (note that the feature's geometry may not intersect the extent),
+ * calling the callback with each feature. If the callback returns a "truthy"
+ * value, iteration will stop and the function will return the same value.
+ *
+ * If you are interested in features whose geometry intersects an extent, call
+ * the {@link ol.source.Vector#forEachFeatureIntersectingExtent
+ * source.forEachFeatureIntersectingExtent()} method instead.
+ *
* @param {ol.Extent} extent Extent.
- * @param {function(this: T, ol.Feature): S} f Callback.
- * @param {T=} opt_this The object to use as `this` in `f`.
- * @return {S|undefined}
+ * @param {function(this: T, ol.Feature): S} callback Called with each feature
+ * whose bounding box intersects the provided extent.
+ * @param {T=} opt_this The object to use as `this` in the callback.
+ * @return {S|undefined} The return value from the last call to the callback.
* @template T,S
* @api
*/
ol.source.Vector.prototype.forEachFeatureInExtent =
- function(extent, f, opt_this) {
- return this.rBush_.forEachInExtent(extent, f, opt_this);
+ function(extent, callback, opt_this) {
+ return this.rBush_.forEachInExtent(extent, callback, opt_this);
};
@@ -256,19 +281,24 @@ ol.source.Vector.prototype.forEachFeatureInExtentAtResolution =
/**
- * This function executes the `callback` function once for each feature
- * intersecting the `extent` until `callback` returns a truthy value. When
- * `callback` returns a truthy value the function immediately returns that
- * value. Otherwise the function returns `undefined`.
+ * Iterate through all features whose geometry intersects the provided extent,
+ * calling the callback with each feature. If the callback returns a "truthy"
+ * value, iteration will stop and the function will return the same value.
+ *
+ * If you only want to test for bounding box intersection, call the
+ * {@link ol.source.Vector#forEachFeatureInExtent
+ * source.forEachFeatureInExtent()} method instead.
+ *
* @param {ol.Extent} extent Extent.
- * @param {function(this: T, ol.Feature): S} f Callback.
- * @param {T=} opt_this The object to use as `this` in `f`.
- * @return {S|undefined}
+ * @param {function(this: T, ol.Feature): S} callback Called with each feature
+ * whose geometry intersects the provided extent.
+ * @param {T=} opt_this The object to use as `this` in the callback.
+ * @return {S|undefined} The return value from the last call to the callback.
* @template T,S
* @api
*/
ol.source.Vector.prototype.forEachFeatureIntersectingExtent =
- function(extent, f, opt_this) {
+ function(extent, callback, opt_this) {
return this.forEachFeatureInExtent(extent,
/**
* @param {ol.Feature} feature Feature.
@@ -279,7 +309,7 @@ ol.source.Vector.prototype.forEachFeatureIntersectingExtent =
var geometry = feature.getGeometry();
goog.asserts.assert(goog.isDefAndNotNull(geometry));
if (geometry.intersectsExtent(extent)) {
- var result = f.call(opt_this, feature);
+ var result = callback.call(opt_this, feature);
if (result) {
return result;
}
@@ -289,6 +319,7 @@ ol.source.Vector.prototype.forEachFeatureIntersectingExtent =
/**
+ * Get all features on the source.
* @return {Array.} Features.
* @api stable
*/
@@ -303,6 +334,7 @@ ol.source.Vector.prototype.getFeatures = function() {
/**
+ * Get all features whose geometry intersects the provided coordinate.
* @param {ol.Coordinate} coordinate Coordinate.
* @return {Array.} Features.
* @api stable
@@ -326,6 +358,7 @@ ol.source.Vector.prototype.getFeaturesInExtent = function(extent) {
/**
+ * Get the closest feature to the provided coordinate.
* @param {ol.Coordinate} coordinate Coordinate.
* @return {ol.Feature} Closest feature.
* @api stable
@@ -468,7 +501,10 @@ ol.source.Vector.prototype.loadFeatures = goog.nullFunction;
/**
- * @param {ol.Feature} feature Feature.
+ * Remove a single feature from the source. If you want to remove all features
+ * at once, use the {@link ol.source.Vector#clear source.clear()} method
+ * instead.
+ * @param {ol.Feature} feature Feature to remove.
* @api stable
*/
ol.source.Vector.prototype.removeFeature = function(feature) {