diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js index 7f8f0fb1a..221858307 100644 --- a/src/MarkerClusterGroup.js +++ b/src/MarkerClusterGroup.js @@ -1,4 +1,3 @@ - /* * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within */ @@ -696,7 +695,17 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ _generateInitialClusters: function () { var maxZoom = this._map.getMaxZoom(), - radius = this.options.maxClusterRadius; + radius = this.options.maxClusterRadius, + radiusFunction = null; + + //If we just set maxClusterRadius to a single number, we need to create + //a simple function to return that number. Otherwise, we just have to + //use the function we've passed in. + if(typeof radius == "number") { + radiusFunction = function(){ return radius }; + } else if(typeof radius == "function") { + radiusFunction = radius; + } if (this.options.disableClusteringAtZoom) { maxZoom = this.options.disableClusteringAtZoom - 1; @@ -704,12 +713,12 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ this._maxZoom = maxZoom; this._gridClusters = {}; this._gridUnclustered = {}; - - //Set up DistanceGrids for each zoom - for (var zoom = maxZoom; zoom >= 0; zoom--) { - this._gridClusters[zoom] = new L.DistanceGrid(radius); - this._gridUnclustered[zoom] = new L.DistanceGrid(radius); - } + + //Set up DistanceGrids for each zoom + for (var zoom = maxZoom; zoom >= 0; zoom--) { + this._gridClusters[zoom] = new L.DistanceGrid(radiusFunction(zoom)); + this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFunction(zoom)); + } this._topClusterLevel = new L.MarkerCluster(this, -1); },