Skip to content

Commit 83d1cd0

Browse files
authored
fix: Fix GeoJSONVectorTileLayer.clear() (#2625)
* fix: fix GeoJSONVectorTileLayer.clear() * fixing vt specs * fixing vt specs
1 parent 45be786 commit 83d1cd0

File tree

11 files changed

+104
-3
lines changed

11 files changed

+104
-3
lines changed

packages/gl/src/layer/TileLayerGLRenderer.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,11 @@ class TileLayerGLRenderer2 extends TexturePoolable(CanvasCompatible(TileLayerRen
370370
deleteTerrainTexture(texture) {
371371
texture.destroy();
372372
}
373+
374+
clear() {
375+
this.clearTileCaches();
376+
super.clear();
377+
}
373378
}
374379

375380
maptalks.TileLayer.registerRenderer<typeof TileLayerGLRenderer2>('gl', TileLayerGLRenderer2);

packages/maptalks/src/layer/tile/TileLayer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ class TileLayer extends Layer {
225225
//@internal
226226
_polygonOffset: number;
227227
//@internal
228-
_renderer: TileLayerCanvasRenderer;
228+
_renderer: any;
229229
//record spatial reference in current rendering frame
230230
//@internal
231231
_spatialRef: SpatialReference;

packages/maptalks/src/renderer/layer/CanvasRenderer.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ class CanvasRenderer extends LayerAbstractRenderer {
7575
Canvas2D.clearRect(this.context, 0, 0, Math.max(w, this.canvas.width), Math.max(h, this.canvas.height));
7676
}
7777

78+
clear() {
79+
this.clearCanvas();
80+
this.setToRedraw();
81+
}
82+
7883
/**
7984
* @english
8085
* Prepare the canvas for rendering. <br>

packages/maptalks/src/renderer/layer/LayerAbstractRenderer.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,8 @@ class LayerAbstractRenderer extends Class {
282282
* Clear canvas
283283
*/
284284
clear(): void {
285-
this.clearCanvas();
285+
this.clearContext();
286+
this.setToRedraw();
286287
}
287288

288289
/**
@@ -829,7 +830,7 @@ class LayerAbstractRenderer extends Class {
829830
}
830831

831832
clearCanvas() {
832-
833+
this.clearContext();
833834
}
834835

835836
/**

packages/vt/src/layer/layer/VectorTileLayer.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,14 @@ class VectorTileLayer extends maptalks.TileLayer {
18291829
super.onRemove();
18301830
}
18311831

1832+
clear() {
1833+
const renderer = this.getRenderer();
1834+
if (renderer) {
1835+
renderer.clearData();
1836+
}
1837+
return super.clear();
1838+
}
1839+
18321840
static fromJSON(layerJSON: object) {
18331841
if (!layerJSON || layerJSON["type"] !== "VectorTileLayer") {
18341842
return null;

packages/vt/src/layer/renderer/VectorTileLayerRenderer.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,27 @@ class VectorTileLayerRenderer extends CanvasCompatible(TileLayerRendererable(Lay
7171
return this._styleCounter;
7272
}
7373

74+
clearData() {
75+
this.clear();
76+
if (!this._workerConn) {
77+
this.layer.fire('cleardata');
78+
return;
79+
}
80+
this._workersyncing = true;
81+
this._workerConn.clearData(() => {
82+
this._workersyncing = false;
83+
this._needRetire = true;
84+
this.setToRedraw();
85+
86+
this.layer.fire('cleardata');
87+
});
88+
}
89+
90+
clear() {
91+
this.clearTileCaches();
92+
super.clear();
93+
}
94+
7495
setStyle() {
7596
if (this._groundPainter) {
7697
this._groundPainter.update();

packages/vt/src/layer/renderer/worker/WorkerConnection.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,16 @@ export default class WorkerConnection extends maptalks.worker.Actor {
193193
this.send(data, null, cb, this._dedicatedVTWorkers[layerId]);
194194
}
195195

196+
clearData(cb) {
197+
const layerId = this._workerLayerId;
198+
const data = {
199+
mapId: this._mapId,
200+
layerId,
201+
command: 'clearData'
202+
};
203+
this.send(data, null, cb, this._dedicatedVTWorkers[layerId]);
204+
}
205+
196206
_getTileKey(tileInfo) {
197207
return tileInfo.id;
198208
}

packages/vt/src/worker/Dispatcher.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ export default class Dispatcher {
118118
}
119119
}
120120

121+
clearData({ mapId, layerId },callback) {
122+
const layer = this._getLayerById(mapId, layerId);
123+
if (layer) {
124+
layer.clearData(callback);
125+
this._resetCache();
126+
}
127+
}
128+
121129
/**
122130
* Receive response from main thread and call callback
123131
* @param {Object} data

packages/vt/src/worker/layer/GeojsonLayerWorker.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ export default class GeoJSONLayerWorker extends BaseLayerWorker {
3030
this.setData(options.data, cb);
3131
}
3232

33+
clearData() {
34+
delete this.index;
35+
}
36+
3337
/**
3438
* Set data
3539
* @param {Object} data

packages/vt/src/worker/layer/VectorTileLayerWorker.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ export default class VectorTileLayerWorker extends LayerWorker {
1919
callback();
2020
}
2121

22+
clearData() {
23+
this._abortRequests();
24+
}
25+
2226
/**
2327
* Load a tile, paint and return gl directives
2428
* @param {Object} tileInfo - tileInfo, url, xyz, res, extent, etc
@@ -150,6 +154,10 @@ export default class VectorTileLayerWorker extends LayerWorker {
150154

151155
onRemove() {
152156
super.onRemove();
157+
this._abortRequests();
158+
}
159+
160+
_abortRequests() {
153161
for (const url in this.requests) {
154162
const xhr = this.requests[url];
155163
if (xhr && xhr.abort) {

0 commit comments

Comments
 (0)