Add ability to use a function for maxClusterRadius

I find it's necessary to use a different radius at different zoom levels. This patch lets you continue to use a single number for all zoom levels, but also lets you use a function to vary the radius for each zoom level.
This commit is contained in:
Ken Schwencke
2014-01-04 15:26:04 -08:00
parent a7b91369b6
commit 9381d3ea92
+17 -8
View File
@@ -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);
},