[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