Skip to content

Commit 14cbf6a

Browse files
committed
revise adding and removing cluster and non-cluster layers
1 parent 0a41ffa commit 14cbf6a

File tree

1 file changed

+41
-30
lines changed

1 file changed

+41
-30
lines changed

src/traces/scattermapbox/plot.js

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -85,41 +85,28 @@ proto.update = function update(calcTrace) {
8585
var map = subplot.map;
8686
var optsAll = convert(subplot.gd, calcTrace);
8787
var below = subplot.belowLookup['trace-' + this.uid];
88-
var i, k, opts, order;
88+
var i, k, opts;
8989
var hasCluster = !!(trace.cluster && trace.cluster.enabled);
9090
var hadCluster = !!this.clusterEnabled;
9191

92-
if(below !== this.below) {
93-
order = hadCluster ? ORDER.cluster : ORDER.nonCluster;
94-
for(i = order.length - 1; i >= 0; i--) {
95-
k = order[i];
96-
map.removeLayer(this.layerIds[k]);
97-
}
98-
99-
order = hasCluster ? ORDER.cluster : ORDER.nonCluster;
100-
for(i = 0; i < order.length; i++) {
101-
k = order[i];
102-
opts = optsAll[k];
103-
this.addLayer(k, opts, below);
104-
}
105-
} else if(hasCluster && !hadCluster) {
106-
for(i = ORDER.nonCluster.length - 1; i >= 0; i--) {
107-
k = ORDER.nonCluster[i];
108-
map.removeLayer(this.layerIds[k]);
109-
map.removeSource(this.sourceIds[k]);
110-
}
92+
function addCluster() {
11193
this.addSource('circle', optsAll.circle, trace.cluster);
11294
for(i = 0; i < ORDER.cluster.length; i++) {
11395
k = ORDER.cluster[i];
11496
opts = optsAll[k];
11597
this.addLayer(k, opts, below);
11698
}
117-
} else if(!hasCluster && hadCluster) {
118-
for(i = 0; i < ORDER.cluster.length; i++) {
99+
}
100+
101+
function removeCluster() {
102+
for(i = ORDER.cluster.length - 1; i >= 0; i--) {
119103
k = ORDER.cluster[i];
120104
map.removeLayer(this.layerIds[k]);
121105
}
122106
map.removeSource(this.sourceIds.circle);
107+
}
108+
109+
function addNonCluster() {
123110
for(i = 0; i < ORDER.nonCluster.length; i++) {
124111
k = ORDER.nonCluster[i];
125112
opts = optsAll[k];
@@ -128,16 +115,40 @@ proto.update = function update(calcTrace) {
128115
}
129116
}
130117

131-
order = hasCluster ? ORDER.cluster : ORDER.nonCluster;
132-
for(i = 0; i < order.length; i++) {
133-
k = order[i];
134-
opts = optsAll[k];
118+
function removeNonCluster() {
119+
for(i = ORDER.nonCluster.length - 1; i >= 0; i--) {
120+
k = ORDER.nonCluster[i];
121+
map.removeLayer(this.layerIds[k]);
122+
map.removeSource(this.sourceIds[k]);
123+
}
124+
}
125+
126+
if(hasCluster && !hadCluster) {
127+
removeNonCluster();
128+
addCluster();
129+
} else if(!hasCluster && hadCluster) {
130+
removeCluster();
131+
addNonCluster();
132+
} else if(below !== this.below) {
133+
if(!hasCluster && !hadCluster) {
134+
removeNonCluster();
135+
addNonCluster();
136+
} else if(hasCluster && hadCluster) {
137+
removeCluster();
138+
addCluster();
139+
}
140+
} else {
141+
var order = hasCluster ? ORDER.cluster : ORDER.nonCluster;
142+
for(i = 0; i < order.length; i++) {
143+
k = order[i];
144+
opts = optsAll[k];
135145

136-
subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout);
146+
subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout);
137147

138-
if(opts.layout.visibility === 'visible') {
139-
this.setSourceData(k, opts);
140-
subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint);
148+
if(opts.layout.visibility === 'visible') {
149+
this.setSourceData(k, opts);
150+
subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint);
151+
}
141152
}
142153
}
143154

0 commit comments

Comments
 (0)