Merge pull request #6972 from ahocevar/loaded-error-tiles

Handle error tiles properly
This commit is contained in:
Andreas Hocevar
2017-06-29 09:33:33 +02:00
committed by GitHub
2 changed files with 18 additions and 12 deletions
+8 -3
View File
@@ -144,9 +144,14 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layer
for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection); tile = tileSource.getTile(z, x, y, pixelRatio, projection);
// When useInterimTilesOnError is false, we consider the error tile as loaded. if (tile.getState() == ol.TileState.ERROR) {
if (tile.getState() == ol.TileState.ERROR && !this.getLayer().getUseInterimTilesOnError()) { if (!tileLayer.getUseInterimTilesOnError()) {
tile.setState(ol.TileState.LOADED); // When useInterimTilesOnError is false, we consider the error tile as loaded.
tile.setState(ol.TileState.LOADED);
} else if (tileLayer.getPreload() > 0) {
// Preloaded tiles for lower resolutions might have finished loading.
newTiles = true;
}
} }
if (!this.isDrawableTile_(tile)) { if (!this.isDrawableTile_(tile)) {
tile = tile.getInterimTile(); tile = tile.getInterimTile();
+10 -9
View File
@@ -244,17 +244,18 @@ ol.VectorImageTile.prototype.load = function() {
*/ */
ol.VectorImageTile.prototype.finishLoading_ = function() { ol.VectorImageTile.prototype.finishLoading_ = function() {
var errors = false; var errors = false;
var tile; var loaded = this.tileKeys.length;
for (var i = this.tileKeys.length - 1; i >= 0; --i) { var state;
tile = this.getTile(this.tileKeys[i]); for (var i = loaded - 1; i >= 0; --i) {
if (tile.getState() == ol.TileState.ERROR) { state = this.getTile(this.tileKeys[i]).getState();
errors = true; if (state != ol.TileState.LOADED) {
} if (state == ol.TileState.ERROR) {
if (tile.getState() != ol.TileState.LOADED) { errors = true;
this.tileKeys.splice(i, 1); }
--loaded;
} }
} }
this.setState(this.tileKeys.length > 0 ? this.setState(loaded > 0 ?
ol.TileState.LOADED : ol.TileState.LOADED :
(errors ? ol.TileState.ERROR : ol.TileState.EMPTY)); (errors ? ol.TileState.ERROR : ol.TileState.EMPTY));
}; };