diff --git a/src/ol/renderer/TileLayerRenderer.js b/src/ol/renderer/TileLayerRenderer.js index 136165e526..9992d93753 100644 --- a/src/ol/renderer/TileLayerRenderer.js +++ b/src/ol/renderer/TileLayerRenderer.js @@ -116,7 +116,7 @@ ol.renderer.TileLayerRenderer.prototype.renderedTiles_ = {}; */ ol.renderer.TileLayerRenderer.prototype.draw = function(center, resolution) { if (resolution !== this.renderedResolution_) { - this.renderedTiles_ = {}; + this.changeResolution_(center, resolution); } var pair = this.getPreferredResAndZ_(resolution); var tileResolution = pair[0]; @@ -171,7 +171,7 @@ ol.renderer.TileLayerRenderer.prototype.draw = function(center, resolution) { numTilesHigh += 1; } - var tileX, tileY, tile, img, pxTileRight, pxTileBottom; + var tileX, tileY, tile, img, pxTileRight, pxTileBottom, xyz, append; var fragment = document.createDocumentFragment(); for (var i=0; i 0); + var yDown = (this.yDown_ > 0); + for (var xyz in this.renderedTiles_) { + index = xyz.split(","); + x = +index[0]; + y = +index[1]; + z = +index[2]; + prune = renderedZ !== z || + // beyond on the left side + (xRight ? x < left : x > left) || + // beyond on the right side + (xRight ? x > right : x < right) || + // above + (yDown ? y < top : y > top) || + // below + (yDown ? y > bottom : y < bottom); + if (prune) { + tile = this.renderedTiles_[xyz]; + this.container_.removeChild(tile.getImg()); + delete this.renderedTiles_[xyz]; + } + } +}; + +/** + * Deal with changes in resolution. + * TODO: implement the animation + * + * @param {ol.Loc} center New center. + * @param {number} resolution New resolution. + */ +ol.renderer.TileLayerRenderer.prototype.changeResolution_ = function(center, resolution) { + var tile; + for (var xyz in this.renderedTiles_) { + tile = this.renderedTiles_[xyz]; + this.container_.removeChild(tile.getImg()); + delete this.renderedTiles_[xyz]; } };