From 36c80f61bccc13fd245c41263941732e4f98cb56 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 28 Jun 2017 23:16:11 +0200 Subject: [PATCH 1/2] Do not delete tile keys for error or empty tiles --- src/ol/vectorimagetile.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ol/vectorimagetile.js b/src/ol/vectorimagetile.js index ed7db45da6..1ad0aeecac 100644 --- a/src/ol/vectorimagetile.js +++ b/src/ol/vectorimagetile.js @@ -244,17 +244,18 @@ ol.VectorImageTile.prototype.load = function() { */ ol.VectorImageTile.prototype.finishLoading_ = function() { var errors = false; - var tile; - for (var i = this.tileKeys.length - 1; i >= 0; --i) { - tile = this.getTile(this.tileKeys[i]); - if (tile.getState() == ol.TileState.ERROR) { - errors = true; - } - if (tile.getState() != ol.TileState.LOADED) { - this.tileKeys.splice(i, 1); + var loaded = this.tileKeys.length; + var state; + for (var i = loaded - 1; i >= 0; --i) { + state = this.getTile(this.tileKeys[i]).getState(); + if (state != ol.TileState.LOADED) { + if (state == ol.TileState.ERROR) { + errors = true; + } + --loaded; } } - this.setState(this.tileKeys.length > 0 ? + this.setState(loaded > 0 ? ol.TileState.LOADED : (errors ? ol.TileState.ERROR : ol.TileState.EMPTY)); }; From 970265acb002f19592e33b9d1ed9900dc571c9d4 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 29 Jun 2017 00:02:24 +0200 Subject: [PATCH 2/2] Give preloaded lower resolution tiles a chance to display immediately --- src/ol/renderer/canvas/tilelayer.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/tilelayer.js b/src/ol/renderer/canvas/tilelayer.js index 2f3695d510..2fb975e72c 100644 --- a/src/ol/renderer/canvas/tilelayer.js +++ b/src/ol/renderer/canvas/tilelayer.js @@ -144,9 +144,14 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layer for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) { 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 && !this.getLayer().getUseInterimTilesOnError()) { - tile.setState(ol.TileState.LOADED); + if (tile.getState() == ol.TileState.ERROR) { + if (!tileLayer.getUseInterimTilesOnError()) { + // 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)) { tile = tile.getInterimTile();