[Pkg-javascript-commits] [leaflet-markercluster] 214/479: Fix up adding markers animatedly. Trash some old not used any more code

Jonas Smedegaard dr at jones.dk
Thu Oct 16 16:00:32 UTC 2014


This is an automated email from the git hooks/post-receive script.

js pushed a commit to branch master
in repository leaflet-markercluster.

commit c683bac22675637adb28a4b8907bb28cafc7e395
Author: danzel <danzel at localhost.geek.nz>
Date:   Tue Sep 11 11:03:35 2012 +1200

    Fix up adding markers animatedly. Trash some old not used any more code
---
 src/MarkerCluster.js      | 202 +++++-----------------------------------------
 src/MarkerClusterGroup.js |   7 +-
 2 files changed, 23 insertions(+), 186 deletions(-)

diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js
index b3bc491..5763f3a 100644
--- a/src/MarkerCluster.js
+++ b/src/MarkerCluster.js
@@ -10,6 +10,7 @@ L.MarkerCluster = L.Marker.extend({
 		this._markers = [];
 		this._childClusters = [];
 		this._childCount = 0;
+		this._iconNeedsUpdate = true;
 
 		this._bounds = new L.LatLngBounds();
 
@@ -46,16 +47,30 @@ L.MarkerCluster = L.Marker.extend({
 		this._group._map.fitBounds(this._bounds);
 	},
 
+	_updateIcon: function () {
+		this._iconNeedsUpdate = true;
+		if (this._icon) {
+			this.setIcon(this);
+		}
+	},
+
 	//Cludge for Icon
 	createIcon: function () {
-		return this._group.options.iconCreateFunction(this).createIcon();
+		if (this._iconNeedsUpdate) {
+			this._iconObj = this._group.options.iconCreateFunction(this);
+			this._iconNeedsUpdate = false;
+		}
+		return this._iconObj.createIcon();
 	},
 	createShadow: function () {
-		return this._group.options.iconCreateFunction(this).createShadow(); //FIXME: Should be saving this
+		return this._iconObj.createShadow();
 	},
 
 	_addChild: function (new1, isNotificationFromChild) {
+
+		this._iconNeedsUpdate = true;
 		this._expandBounds(new1);
+
 		if (new1 instanceof L.MarkerCluster) {
 			if (!isNotificationFromChild) {
 				this._childClusters.push(new1);
@@ -69,13 +84,6 @@ L.MarkerCluster = L.Marker.extend({
 			this._childCount++;
 		}
 
-		if (this._childCount > 10)
-			//debugger;
-
-		if (this._icon) {
-			this.setIcon(this._group.options.iconCreateFunction(this));
-		}
-
 		if (this._parent) {
 			this._parent._addChild(new1, true);
 		}
@@ -95,11 +103,6 @@ L.MarkerCluster = L.Marker.extend({
 					p._recalculateBounds();
 					p = p._parent;
 				}
-
-				//TODO?
-				//if (!('_zoom' in this)) {
-				//	this.setIcon(group.options.iconCreateFunction(this));
-				//}
 				return true;
 			}
 		}
@@ -145,113 +148,6 @@ L.MarkerCluster = L.Marker.extend({
 		L.FeatureGroup.prototype.addLayer.call(this._group, this);
 	},
 
-	//layer: The layer to try add
-	//returns:
-	//  true: was able to put this marker in, but don't know its current visible parents position (If returned externally, add this marker at its position)
-	//  false: wasn't able to put this marker in
-	//  a MarkerCluster: the visible parent of the marker
-	_recursivelyAddLayer: function (layer, zoom) {
-		var group = this._group,
-			map = group._map,
-			maxClusterRadius = group.options.maxClusterRadius,
-			result = false,
-			sqDist = this._group._sqDist,
-			i;
-
-		for (i = this._childClusters.length - 1; i >= 0; i--) {
-			var c = this._childClusters[i];
-			//Recurse into children where their bounds fits the layer or they can just take it
-			if (c._bounds.contains(layer.getLatLng()) || c._canAcceptPosition(layer.getLatLng(), zoom + 1)) {
-				result = c._recursivelyAddLayer(layer, zoom + 1);
-				if (result) {
-					this._childCount++;
-					break;
-				}
-			}
-		}
-
-		//Couldn't add it to a child, but it should be part of us (this._zoom -> we are the root node)
-		if (!result && (this._canAcceptPosition(layer.getLatLng(), zoom) || ('_zoom' in this))) {
-
-			//If we are allowed to cluster at our childs level
-			if (zoom + 1 !== group.options.disableClusteringAtZoom) {
-
-				//Add to ourself instead
-				var layerPos = map.project(layer.getLatLng(), zoom + 1);
-
-				//var distanceGrid = new L.DistanceGrid(maxClusterRadius);
-				for (i = this._markers.length - 1; i >= 0; i--) {
-					var m = this._markers[i];
-					if (sqDist(layerPos, map.project(m.getLatLng(), zoom + 1)) < (maxClusterRadius * maxClusterRadius)) {
-						result = m;
-						this._markers.splice(i, 1);
-						this._childCount--;
-						break;
-					}
-				}
-			}
-			//result = distanceGrid.getNearObject(map.project(layer.getLatLng(), zoom + 1));
-
-			if (result) {
-				//Create a new cluster for them
-				result = new L.MarkerCluster(this._group, result, layer);
-				result._baseInit();
-
-				//Add our new child
-				this._addChild(result);
-
-				//We may be above the zoom that these 2 markers would initially cluster at
-				// so push the new cluster as deep as it can go
-				var wantedZoom = map.getZoom() - 1,
-					maxZoom = map.getMaxZoom(),
-					newResult,
-					finalResult = (zoom === wantedZoom) ? result : true;
-
-				if (group.options.disableClusteringAtZoom) {
-					maxZoom = group.options.disableClusteringAtZoom - 2;
-				}
-
-				while (zoom < maxZoom) {
-					zoom++;
-
-					//Shouldn't be a cluster at this level
-					if (sqDist(map.project(layer.getLatLng(), zoom + 1), map.project(result._markers[0].getLatLng(), zoom + 1)) >= (maxClusterRadius * maxClusterRadius)) {
-						break;
-					}
-
-					newResult = new L.MarkerCluster(this._group, result._markers[0], layer);
-					newResult._baseInit();
-					result._markers = [];
-					result._childClusters.push(newResult);
-					result = newResult;
-
-					if (zoom === wantedZoom) {
-						finalResult = result;
-					}
-				}
-				result = finalResult;
-
-			} else {
-				this._addChild(layer);
-				result = true;
-			}
-		}
-
-		if (result) {
-			if (!('_zoom' in this)) {
-				this.setIcon(this._group.options.iconCreateFunction(this));
-			}
-			this._recalculateBounds();
-		}
-		if (result === true) {
-			if (this._icon) {
-				result = this;
-			}
-		}
-
-		return result;
-	},
-
 	_canAcceptPosition: function (latlng, zoom) {
 		if (this._childCount === 0) {
 			return true;
@@ -263,69 +159,7 @@ L.MarkerCluster = L.Marker.extend({
 
 		return (this._group._sqDist(pos, otherpos) <= clusterRadiusSqrd);
 	},
-
-	//Removes the given node from this marker cluster (or its child as required)
-	//Returns true if it (or a child cluster) removes the marker
-	_recursivelyRemoveLayer: function (layer) {
-		var group = this._group,
-			markers = this._markers,
-			childClusters = this._childClusters,
-			i;
-
-		//Check our children
-		for (i = markers.length - 1; i >= 0; i--) {
-			if (markers[i] === layer) {
-				if (markers[i]._icon) {
-					L.FeatureGroup.prototype.removeLayer.call(group, markers[i]);
-				}
-
-				markers.splice(i, 1);
-				this._childCount--;
-				this._recalculateBounds();
-
-				if (!('_zoom' in this)) {
-					this.setIcon(group.options.iconCreateFunction(this));
-				}
-				return true;
-			}
-		}
-
-		//Otherwise check our childClusters
-		for (i = childClusters.length - 1; i >= 0; i--) {
-			var child = childClusters[i];
-
-			if (child._bounds.contains(layer._latlng) && child._recursivelyRemoveLayer(layer)) {
-				this._childCount--;
-				if (!('_zoom' in this)) {
-					this.setIcon(group.options.iconCreateFunction(this));
-				}
-
-				//if our child cluster is no longer a cluster, remove it and replace with just the marker
-				if (child._childCount === 1) {
-
-					//If the child is visible, remove it and put the marker on the map
-					if (child._icon) {
-						L.FeatureGroup.prototype.removeLayer.call(group, child);
-						L.FeatureGroup.prototype.addLayer.call(group, child._markers[0]);
-					}
-
-					//Take ownership of its only marker and bin the cluster
-					markers.push(child._markers[0]);
-					childClusters.splice(i, 1);
-				}
-
-				this._recalculateBounds();
-
-				if (this._icon && this._childCount > 1) { //No need to update if we are getting removed anyway
-					this.setIcon(group.options.iconCreateFunction(this));
-				}
-				return true;
-			}
-		}
-
-		return false;
-	},
-
+	
 	_recursivelyAnimateChildrenIn: function (bounds, center, depth) {
 		this._recursively(bounds, 0, depth - 1,
 			function (c) {
diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js
index cc995f5..2fabc92 100644
--- a/src/MarkerClusterGroup.js
+++ b/src/MarkerClusterGroup.js
@@ -523,6 +523,8 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 			var markers = newCluster.getAllChildMarkers();
 			L.FeatureGroup.prototype.removeLayer.call(this, markers[0]);
 			L.FeatureGroup.prototype.removeLayer.call(this, markers[1]);
+		} else {
+			newCluster._updateIcon();
 		}
 		//TODO else update icon?
 	}
@@ -654,9 +656,10 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 		var me = this;
 
 		L.FeatureGroup.prototype.addLayer.call(this, layer);
-		if (newCluster !== true) {
+		if (newCluster !== layer) {
 			if (newCluster._childCount > 2) { //Was already a cluster
 
+				newCluster._updateIcon();
 				this._forceLayout();
 				this._animationStart();
 
@@ -674,7 +677,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 				this._forceLayout();
 
 				me._animationStart();
-				me._animationZoomOutSingle(newCluster, 0, this._map.getMaxZoom());
+				me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._map.getZoom());
 			}
 		}
 	},

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/leaflet-markercluster.git



More information about the Pkg-javascript-commits mailing list