diff --git a/src/ol/renderer/dom/tilelayer.js b/src/ol/renderer/dom/tilelayer.js index a831ceb40b..16a32fe1c7 100644 --- a/src/ol/renderer/dom/tilelayer.js +++ b/src/ol/renderer/dom/tilelayer.js @@ -33,12 +33,6 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer, target) { */ this.renderedMapResolution_ = undefined; - /** - * @type {ol.Extent} - * @private - */ - this.renderedExtent_ = null; - /** * @type {number|undefined} * @private @@ -78,35 +72,18 @@ ol.renderer.dom.TileLayer.prototype.getTileOffset_ = function(z, resolution) { /** - * Get rid of tiles that are not at the currently rendered z. + * Get rid of all tiles that weren't drawn in the most recent rendering. + * @param {Object.>} tilesDrawnByZ Tiles just + * rendered. * @private */ -ol.renderer.dom.TileLayer.prototype.removeAltZTiles_ = function() { - var z = this.renderedZ_; - var key, tileCoord, tile; +ol.renderer.dom.TileLayer.prototype.removeExtraTiles_ = + function(tilesDrawnByZ) { + var key, tileCoord, tilesDrawn, tile; for (key in this.renderedTiles_) { tileCoord = ol.TileCoord.createFromString(key); - if (tileCoord.z !== z) { - tile = this.renderedTiles_[key]; - delete this.renderedTiles_[key]; - goog.dom.removeNode(tile.getImage(this)); - } - } -}; - - -/** - * Get rid of tiles outside the rendered extent. - * @private - */ -ol.renderer.dom.TileLayer.prototype.removeOutOfRangeTiles_ = function() { - var mapExtent = this.renderedExtent_; - var grid = this.getLayer().getTileSource().getTileGrid(); - var key, tileCoord, tileExtent, tile; - for (key in this.renderedTiles_) { - tileCoord = ol.TileCoord.createFromString(key); - tileExtent = grid.getTileCoordExtent(tileCoord); - if (!tileExtent.intersects(mapExtent)) { + tilesDrawn = tilesDrawnByZ[tileCoord.z]; + if (!(tilesDrawn && key in tilesDrawn)) { tile = this.renderedTiles_[key]; delete this.renderedTiles_[key]; goog.dom.removeNode(tile.getImage(this)); @@ -156,7 +133,6 @@ ol.renderer.dom.TileLayer.prototype.render = function() { // first pass through the tile range to determine all the tiles needed - var allTilesLoaded = true; tileRange.forEachTileCoord(z, function(tileCoord) { var tile = tileSource.getTile(tileCoord); if (goog.isNull(tile)) { @@ -170,7 +146,6 @@ ol.renderer.dom.TileLayer.prototype.render = function() { tilesToDrawByZ[z][key] = tile; return; } else { - allTilesLoaded = false; if (state != ol.TileState.LOADING) { goog.events.listen(tile, goog.events.EventType.CHANGE, this.handleTileChange_, false, this); @@ -261,12 +236,8 @@ ol.renderer.dom.TileLayer.prototype.render = function() { goog.dom.appendChild(this.target, fragment); } - this.renderedExtent_ = mapExtent; this.renderedZ_ = z; this.renderedMapResolution_ = mapResolution; - if (allTilesLoaded) { - this.removeAltZTiles_(); - } - this.removeOutOfRangeTiles_(); + this.removeExtraTiles_(tilesToDrawByZ); };