Skip to content

Commit 08c3d89

Browse files
[fix]l7聚合图数据更新,reRender时机
1 parent dc895a9 commit 08c3d89

File tree

3 files changed

+78
-4
lines changed

3 files changed

+78
-4
lines changed

src/mapboxgl/overlay/L7Layer.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ export class L7Layer {
6161
addSceneLayer(scene) {
6262
this.scene = scene;
6363
this.scene.addLayer(this.l7layer);
64+
this.updateSourceEffect();
65+
}
66+
67+
updateSourceEffect() {
68+
const source = this.l7layer.getSource();
69+
source &&
70+
source.on('update', () => {
71+
this.reRender();
72+
});
6473
}
6574

6675
onAdd(map) {

test/mapboxgl/overlay/L7LayerSpec.js

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ describe('mapboxgl L7Layer', () => {
1616
longitude: 121.4316962,
1717
latitude: 31.26082325,
1818
unit_price: 71469.4,
19-
count: 2
19+
count: 2,
20+
v: 100
2021
}
2122
];
2223
beforeAll((done) => {
@@ -30,6 +31,8 @@ describe('mapboxgl L7Layer', () => {
3031

3132
spyOn(L7, 'PointLayer').and.callFake(mockL7.PointLayer);
3233
spyOn(L7, 'GeometryLayer').and.callFake(mockL7.GeometryLayer);
34+
spyOn(L7, 'HeatmapLayer').and.callFake(mockL7.HeatmapLayer);
35+
3336
spyOn(L7, 'Scene').and.callFake(mockL7.Scene);
3437
spyOn(L7, 'Mapbox').and.callFake(mockL7.Mapbox);
3538
testDiv = window.document.createElement('div');
@@ -321,4 +324,49 @@ describe('mapboxgl L7Layer', () => {
321324

322325
done();
323326
});
327+
it('HeatmapLayer grid updateSource', (done) => {
328+
var layer = new L7Layer({ type: 'HeatmapLayer' });
329+
var l7Layer = layer.getL7Layer();
330+
l7Layer
331+
.source(data, {
332+
parser: {
333+
type: 'json',
334+
x: 'longitude',
335+
y: 'latitude'
336+
},
337+
transforms: [
338+
{
339+
type: 'grid',
340+
size: 2000000,
341+
field: 'v',
342+
method: 'sum'
343+
}
344+
]
345+
})
346+
.shape('circle')
347+
.active(true)
348+
.animate(true)
349+
.size(56)
350+
.color('#4cfd47');
351+
map.addLayer(layer);
352+
spyOn(layer, 'reRender');
353+
l7Layer.setData(data, {
354+
parser: {
355+
type: 'json',
356+
x: 'j',
357+
y: 'w'
358+
},
359+
transforms: [
360+
{
361+
type: 'grid',
362+
size: 200000,
363+
field: 'v',
364+
method: 'sum'
365+
}
366+
]
367+
});
368+
expect(l7Layer).not.toBeNull();
369+
expect(layer.reRender).toHaveBeenCalled();
370+
done();
371+
});
324372
});

test/tool/mock_l7.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class Scene {
55
stopAnimate: () => true,
66
startAnimate: () => true
77
};
8-
this.callbacks = {}
8+
this.callbacks = {};
99
}
1010
removeAllLayer() {}
1111
getLayer() {
@@ -19,7 +19,7 @@ class Scene {
1919
}
2020
on(type, callback) {
2121
this.callbacks[type] = callback;
22-
callback()
22+
callback();
2323
}
2424
emit(type) {
2525
this.callbacks[type]();
@@ -49,6 +49,7 @@ class Layer {
4949
this.layerModel = {
5050
spriteAnimate: false
5151
};
52+
this.stacks = {};
5253
}
5354
source() {
5455
return this;
@@ -90,7 +91,23 @@ class Layer {
9091
hide() {
9192
return this;
9293
}
94+
getSource() {
95+
return {
96+
on: (type, cb) => {
97+
this.stacks[type] = [cb];
98+
},
99+
emit: (type) => {
100+
this.stacks[type].forEach((cb) => {
101+
cb();
102+
});
103+
}
104+
};
105+
}
106+
setData() {
107+
this.getSource().emit('update');
108+
}
93109
}
94110
const PointLayer = Layer;
95111
const GeometryLayer = Layer;
96-
export { PointLayer, GeometryLayer, Scene, Mapbox, Maplibre };
112+
const HeatmapLayer = Layer;
113+
export { PointLayer, GeometryLayer, HeatmapLayer, Scene, Mapbox, Maplibre };

0 commit comments

Comments
 (0)