diff --git a/examples/cluster.html b/examples/cluster.html index 005d124f8a..e17a29d176 100644 --- a/examples/cluster.html +++ b/examples/cluster.html @@ -7,3 +7,7 @@ docs: > tags: "cluster, vector" ---
+ diff --git a/examples/cluster.js b/examples/cluster.js index 2a5e944b44..99d0e028c4 100644 --- a/examples/cluster.js +++ b/examples/cluster.js @@ -14,6 +14,8 @@ goog.require('ol.style.Style'); goog.require('ol.style.Text'); +var distance = document.getElementById('distance'); + var count = 20000; var features = new Array(count); var e = 4500000; @@ -27,7 +29,7 @@ var source = new ol.source.Vector({ }); var clusterSource = new ol.source.Cluster({ - distance: 40, + distance: parseInt(distance.value, 10), source: source }); @@ -74,3 +76,7 @@ var map = new ol.Map({ zoom: 2 }) }); + +distance.addEventListener('input', function() { + clusterSource.setDistance(parseInt(distance.value, 10)); +}); diff --git a/src/ol/source/cluster.js b/src/ol/source/cluster.js index 29057ce812..748a3272dd 100644 --- a/src/ol/source/cluster.js +++ b/src/ol/source/cluster.js @@ -69,7 +69,7 @@ ol.source.Cluster = function(options) { this.source_ = options.source; this.source_.on(ol.events.EventType.CHANGE, - ol.source.Cluster.prototype.onSourceChange_, this); + ol.source.Cluster.prototype.refresh_, this); }; ol.inherits(ol.source.Cluster, ol.source.Vector); @@ -99,11 +99,22 @@ ol.source.Cluster.prototype.loadFeatures = function(extent, resolution, }; +/** + * Set the distance in pixels between clusters. + * @param {number} distance The distance in pixels. + * @api + */ +ol.source.Cluster.prototype.setDistance = function(distance) { + this.distance_ = distance; + this.refresh_(); +}; + + /** * handle the source changing * @private */ -ol.source.Cluster.prototype.onSourceChange_ = function() { +ol.source.Cluster.prototype.refresh_ = function() { this.clear(); this.cluster_(); this.addFeatures(this.features_); diff --git a/test/spec/ol/source/cluster.test.js b/test/spec/ol/source/cluster.test.js index f470290568..528b1aa133 100644 --- a/test/spec/ol/source/cluster.test.js +++ b/test/spec/ol/source/cluster.test.js @@ -19,6 +19,7 @@ describe('ol.source.Cluster', function() { }); expect(source).to.be.a(ol.source.Source); expect(source).to.be.a(ol.source.Cluster); + expect(source.distance_).to.be(20); }); }); @@ -63,4 +64,17 @@ describe('ol.source.Cluster', function() { expect(source.getFeatures()[0].get('features').length).to.be(2); }); }); + + describe('#setDistance', function() { + it('changes the distance value', function() { + var source = new ol.source.Cluster({ + distance: 100, + source: new ol.source.Vector() + }); + expect(source.distance_).to.be(100); + source.setDistance(10); + expect(source.distance_).to.be(10); + }); + }); + });