Remove tiles outside rendered extent

To avoid having misplaced at alternate resolutions while zooming, all tiles
outside the rendered extent need to be removed from the dom (closes #53).
This commit is contained in:
Tim Schaub
2012-10-07 23:47:47 -06:00
parent d6173a5aac
commit 2c2d40a53c

View File

@@ -34,10 +34,10 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer, target) {
this.renderedMapResolution_ = undefined;
/**
* @type {ol.TileRange|undefined}
* @type {ol.Extent}
* @private
*/
this.renderedTileRange_ = undefined;
this.renderedExtent_ = null;
/**
* @type {number|undefined}
@@ -103,26 +103,20 @@ ol.renderer.dom.TileLayer.prototype.removeAltZTiles_ = function() {
/**
* Get rid of tiles outside the rendered extent. Only removes tiles at the
* currently rendered z.
* Get rid of tiles outside the rendered extent.
* @private
*/
ol.renderer.dom.TileLayer.prototype.removeOutOfRangeTiles_ = function() {
var tileRange = this.renderedTileRange_;
var z = this.renderedZ_;
var key, tileCoord, prune, tile;
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);
if (tileCoord.z === z) {
prune = tileCoord.x < tileRange.minX ||
tileCoord.x > tileRange.maxX ||
tileCoord.y < tileRange.minY ||
tileCoord.y > tileRange.maxY;
if (prune) {
tile = this.renderedTiles_[key];
delete this.renderedTiles_[key];
goog.dom.removeNode(tile.getImage(this));
}
tileExtent = grid.getTileCoordExtent(tileCoord);
if (!tileExtent.intersects(mapExtent)) {
tile = this.renderedTiles_[key];
delete this.renderedTiles_[key];
goog.dom.removeNode(tile.getImage(this));
}
}
};
@@ -308,7 +302,7 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
goog.dom.appendChild(this.target, fragment);
}
this.renderedTileRange_ = tileRange;
this.renderedExtent_ = mapExtent;
this.renderedZ_ = z;
this.renderedMapResolution_ = mapResolution;