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:
@@ -34,10 +34,10 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer, target) {
|
|||||||
this.renderedMapResolution_ = undefined;
|
this.renderedMapResolution_ = undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.TileRange|undefined}
|
* @type {ol.Extent}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.renderedTileRange_ = undefined;
|
this.renderedExtent_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number|undefined}
|
* @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
|
* Get rid of tiles outside the rendered extent.
|
||||||
* currently rendered z.
|
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.TileLayer.prototype.removeOutOfRangeTiles_ = function() {
|
ol.renderer.dom.TileLayer.prototype.removeOutOfRangeTiles_ = function() {
|
||||||
var tileRange = this.renderedTileRange_;
|
var mapExtent = this.renderedExtent_;
|
||||||
var z = this.renderedZ_;
|
var grid = this.getLayer().getTileSource().getTileGrid();
|
||||||
var key, tileCoord, prune, tile;
|
var key, tileCoord, tileExtent, tile;
|
||||||
for (key in this.renderedTiles_) {
|
for (key in this.renderedTiles_) {
|
||||||
tileCoord = ol.TileCoord.createFromString(key);
|
tileCoord = ol.TileCoord.createFromString(key);
|
||||||
if (tileCoord.z === z) {
|
tileExtent = grid.getTileCoordExtent(tileCoord);
|
||||||
prune = tileCoord.x < tileRange.minX ||
|
if (!tileExtent.intersects(mapExtent)) {
|
||||||
tileCoord.x > tileRange.maxX ||
|
tile = this.renderedTiles_[key];
|
||||||
tileCoord.y < tileRange.minY ||
|
delete this.renderedTiles_[key];
|
||||||
tileCoord.y > tileRange.maxY;
|
goog.dom.removeNode(tile.getImage(this));
|
||||||
if (prune) {
|
|
||||||
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);
|
goog.dom.appendChild(this.target, fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.renderedTileRange_ = tileRange;
|
this.renderedExtent_ = mapExtent;
|
||||||
this.renderedZ_ = z;
|
this.renderedZ_ = z;
|
||||||
this.renderedMapResolution_ = mapResolution;
|
this.renderedMapResolution_ = mapResolution;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user