@@ -9,7 +9,7 @@ const options = {
99
1010
1111const DEFAULT_TILESIZE = new Size ( 256 , 256 ) ;
12- const EVENTS = 'show hide remove setzindex' ;
12+ const EVENTS = 'show hide remove setzindex forcereloadstart ' ;
1313
1414function checkLayers ( tileLayers ) {
1515 if ( ! Array . isArray ( tileLayers ) ) {
@@ -238,6 +238,49 @@ class GroupTileLayer extends TileLayer {
238238 return null ;
239239 }
240240
241+ _removeChildTileCache ( layer ) {
242+ if ( ! layer ) {
243+ return this ;
244+ }
245+ const renderer = this . getRenderer ( ) ;
246+ if ( ! renderer ) {
247+ return this ;
248+ }
249+ let cache ;
250+ const id = layer . getId ( ) ;
251+ const validateCache = ( ) => {
252+ return cache && cache . info && cache . info . layer === id ;
253+ } ;
254+ //clear LRU
255+ if ( renderer . tileCache ) {
256+ const keys = renderer . tileCache . keys ( ) ;
257+ keys . forEach ( key => {
258+ cache = renderer . tileCache . get ( key ) ;
259+ if ( validateCache ( ) ) {
260+ renderer . tileCache . remove ( key ) ;
261+ }
262+ } ) ;
263+ }
264+ //clear tilesInView cache
265+ const tilesInView = renderer . tilesInView || { } ;
266+ for ( const key in tilesInView ) {
267+ cache = tilesInView [ key ] ;
268+ if ( validateCache ( ) ) {
269+ delete tilesInView [ key ] ;
270+ }
271+ }
272+ //cancel image load
273+ const tilesLoading = renderer . tilesLoading || { } ;
274+ for ( const key in tilesLoading ) {
275+ cache = tilesLoading [ key ] ;
276+ if ( validateCache ( ) ) {
277+ renderer . abortTileLoading ( cache . image ) ;
278+ delete tilesLoading [ key ] ;
279+ }
280+ }
281+ return this ;
282+ }
283+
241284 _onLayerShowHide ( e ) {
242285 const { type, target } = e || { } ;
243286 //listen tilelayer.remove() method fix #1629
@@ -248,6 +291,8 @@ class GroupTileLayer extends TileLayer {
248291 this . _refresh ( ) ;
249292 } else if ( type === 'setzindex' ) {
250293 this . _sortLayers ( ) ;
294+ } else if ( type === 'forcereloadstart' ) {
295+ this . _removeChildTileCache ( target ) ;
251296 }
252297 this . _renderLayers ( ) ;
253298 return this ;
@@ -275,6 +320,8 @@ class GroupTileLayer extends TileLayer {
275320 if ( ! layer . getMap ( ) ) {
276321 layer . _bindMap ( map ) ;
277322 }
323+ //remove old event handler
324+ layer . off ( EVENTS , this . _onLayerShowHide , this ) ;
278325 layer . on ( EVENTS , this . _onLayerShowHide , this ) ;
279326 } ) ;
280327 return this ;
0 commit comments