Add projection parameter to ol.source.Tile#forEachLoadedTile
This commit is contained in:
@@ -309,7 +309,8 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame =
|
|||||||
/** @type {Array.<ol.Tile>} */
|
/** @type {Array.<ol.Tile>} */
|
||||||
var tilesToClear = [];
|
var tilesToClear = [];
|
||||||
|
|
||||||
var findLoadedTiles = this.createLoadedTileFinder(tileSource, tilesToDrawByZ);
|
var findLoadedTiles = this.createLoadedTileFinder(
|
||||||
|
tileSource, projection, tilesToDrawByZ);
|
||||||
|
|
||||||
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,8 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
var tilesToDrawByZ = {};
|
var tilesToDrawByZ = {};
|
||||||
tilesToDrawByZ[z] = {};
|
tilesToDrawByZ[z] = {};
|
||||||
|
|
||||||
var findLoadedTiles = this.createLoadedTileFinder(tileSource, tilesToDrawByZ);
|
var findLoadedTiles = this.createLoadedTileFinder(
|
||||||
|
tileSource, projection, tilesToDrawByZ);
|
||||||
|
|
||||||
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ ol.renderer.Layer.prototype.hasFeatureAtCoordinate = goog.functions.FALSE;
|
|||||||
/**
|
/**
|
||||||
* Create a function that adds loaded tiles to the tile lookup.
|
* Create a function that adds loaded tiles to the tile lookup.
|
||||||
* @param {ol.source.Tile} source Tile source.
|
* @param {ol.source.Tile} source Tile source.
|
||||||
|
* @param {ol.proj.Projection} projection Projection of the tiles.
|
||||||
* @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
|
* @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
|
||||||
* tiles by zoom level.
|
* tiles by zoom level.
|
||||||
* @return {function(number, ol.TileRange):boolean} A function that can be
|
* @return {function(number, ol.TileRange):boolean} A function that can be
|
||||||
@@ -94,7 +95,8 @@ ol.renderer.Layer.prototype.hasFeatureAtCoordinate = goog.functions.FALSE;
|
|||||||
* lookup.
|
* lookup.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.Layer.prototype.createLoadedTileFinder = function(source, tiles) {
|
ol.renderer.Layer.prototype.createLoadedTileFinder =
|
||||||
|
function(source, projection, tiles) {
|
||||||
return (
|
return (
|
||||||
/**
|
/**
|
||||||
* @param {number} zoom Zoom level.
|
* @param {number} zoom Zoom level.
|
||||||
@@ -102,12 +104,13 @@ ol.renderer.Layer.prototype.createLoadedTileFinder = function(source, tiles) {
|
|||||||
* @return {boolean} The tile range is fully loaded.
|
* @return {boolean} The tile range is fully loaded.
|
||||||
*/
|
*/
|
||||||
function(zoom, tileRange) {
|
function(zoom, tileRange) {
|
||||||
return source.forEachLoadedTile(zoom, tileRange, function(tile) {
|
return source.forEachLoadedTile(projection, zoom,
|
||||||
if (!tiles[zoom]) {
|
tileRange, function(tile) {
|
||||||
tiles[zoom] = {};
|
if (!tiles[zoom]) {
|
||||||
}
|
tiles[zoom] = {};
|
||||||
tiles[zoom][tile.tileCoord.toString()] = tile;
|
}
|
||||||
});
|
tiles[zoom][tile.tileCoord.toString()] = tile;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
|
|||||||
/**
|
/**
|
||||||
* Create a function that adds loaded tiles to the tile lookup.
|
* Create a function that adds loaded tiles to the tile lookup.
|
||||||
* @param {ol.source.Tile} source Tile source.
|
* @param {ol.source.Tile} source Tile source.
|
||||||
|
* @param {ol.proj.Projection} projection Projection of the tiles.
|
||||||
* @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
|
* @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
|
||||||
* tiles by zoom level.
|
* tiles by zoom level.
|
||||||
* @return {function(number, ol.TileRange):boolean} A function that can be
|
* @return {function(number, ol.TileRange):boolean} A function that can be
|
||||||
@@ -113,7 +114,7 @@ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
|
|||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.TileLayer.prototype.createLoadedTileFinder =
|
ol.renderer.webgl.TileLayer.prototype.createLoadedTileFinder =
|
||||||
function(source, tiles) {
|
function(source, projection, tiles) {
|
||||||
var mapRenderer = this.mapRenderer;
|
var mapRenderer = this.mapRenderer;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -123,16 +124,17 @@ ol.renderer.webgl.TileLayer.prototype.createLoadedTileFinder =
|
|||||||
* @return {boolean} The tile range is fully loaded.
|
* @return {boolean} The tile range is fully loaded.
|
||||||
*/
|
*/
|
||||||
function(zoom, tileRange) {
|
function(zoom, tileRange) {
|
||||||
return source.forEachLoadedTile(zoom, tileRange, function(tile) {
|
return source.forEachLoadedTile(projection, zoom,
|
||||||
var loaded = mapRenderer.isTileTextureLoaded(tile);
|
tileRange, function(tile) {
|
||||||
if (loaded) {
|
var loaded = mapRenderer.isTileTextureLoaded(tile);
|
||||||
if (!tiles[zoom]) {
|
if (loaded) {
|
||||||
tiles[zoom] = {};
|
if (!tiles[zoom]) {
|
||||||
}
|
tiles[zoom] = {};
|
||||||
tiles[zoom][tile.tileCoord.toString()] = tile;
|
}
|
||||||
}
|
tiles[zoom][tile.tileCoord.toString()] = tile;
|
||||||
return loaded;
|
}
|
||||||
});
|
return loaded;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -239,7 +241,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
|||||||
tilesToDrawByZ[z] = {};
|
tilesToDrawByZ[z] = {};
|
||||||
|
|
||||||
var findLoadedTiles = this.createLoadedTileFinder(
|
var findLoadedTiles = this.createLoadedTileFinder(
|
||||||
tileSource, tilesToDrawByZ);
|
tileSource, projection, tilesToDrawByZ);
|
||||||
|
|
||||||
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
|
|||||||
@@ -115,9 +115,7 @@ ol.source.TileImage.prototype.getTileGridForProjection = function(projection) {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.proj.Projection} projection Projection.
|
* @inheritDoc
|
||||||
* @return {ol.TileCache} Tile cache.
|
|
||||||
* @protected
|
|
||||||
*/
|
*/
|
||||||
ol.source.TileImage.prototype.getTileCacheForProjection = function(projection) {
|
ol.source.TileImage.prototype.getTileCacheForProjection = function(projection) {
|
||||||
if (ol.proj.equivalent(this.getProjection(), projection)) {
|
if (ol.proj.equivalent(this.getProjection(), projection)) {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ goog.require('ol.Extent');
|
|||||||
goog.require('ol.TileCache');
|
goog.require('ol.TileCache');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
|
goog.require('ol.proj');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.source.Source');
|
goog.require('ol.source.Source');
|
||||||
goog.require('ol.tilecoord');
|
goog.require('ol.tilecoord');
|
||||||
@@ -105,6 +106,7 @@ ol.source.Tile.prototype.expireCache = function(usedTiles) {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param {ol.proj.Projection} projection
|
||||||
* @param {number} z Zoom level.
|
* @param {number} z Zoom level.
|
||||||
* @param {ol.TileRange} tileRange Tile range.
|
* @param {ol.TileRange} tileRange Tile range.
|
||||||
* @param {function(ol.Tile):(boolean|undefined)} callback Called with each
|
* @param {function(ol.Tile):(boolean|undefined)} callback Called with each
|
||||||
@@ -112,15 +114,21 @@ ol.source.Tile.prototype.expireCache = function(usedTiles) {
|
|||||||
* considered loaded.
|
* considered loaded.
|
||||||
* @return {boolean} The tile range is fully covered with loaded tiles.
|
* @return {boolean} The tile range is fully covered with loaded tiles.
|
||||||
*/
|
*/
|
||||||
ol.source.Tile.prototype.forEachLoadedTile = function(z, tileRange, callback) {
|
ol.source.Tile.prototype.forEachLoadedTile =
|
||||||
|
function(projection, z, tileRange, callback) {
|
||||||
|
var tileCache = this.getTileCacheForProjection(projection);
|
||||||
|
if (goog.isNull(tileCache)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var covered = true;
|
var covered = true;
|
||||||
var tile, tileCoordKey, loaded;
|
var tile, tileCoordKey, loaded;
|
||||||
for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
tileCoordKey = this.getKeyZXY(z, x, y);
|
tileCoordKey = this.getKeyZXY(z, x, y);
|
||||||
loaded = false;
|
loaded = false;
|
||||||
if (this.tileCache.containsKey(tileCoordKey)) {
|
if (tileCache.containsKey(tileCoordKey)) {
|
||||||
tile = /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));
|
tile = /** @type {!ol.Tile} */ (tileCache.get(tileCoordKey));
|
||||||
loaded = tile.getState() === ol.TileState.LOADED;
|
loaded = tile.getState() === ol.TileState.LOADED;
|
||||||
if (loaded) {
|
if (loaded) {
|
||||||
loaded = (callback(tile) !== false);
|
loaded = (callback(tile) !== false);
|
||||||
@@ -203,6 +211,21 @@ ol.source.Tile.prototype.getTileGridForProjection = function(projection) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.proj.Projection} projection Projection.
|
||||||
|
* @return {ol.TileCache} Tile cache.
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
ol.source.Tile.prototype.getTileCacheForProjection = function(projection) {
|
||||||
|
if (goog.isNull(this.tileCache) ||
|
||||||
|
!ol.proj.equivalent(this.getProjection(), projection)) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return this.tileCache;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {number} z Z.
|
* @param {number} z Z.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 3;
|
var zoom = 3;
|
||||||
var range = grid.getTileRangeForExtentAndZ(extent, zoom);
|
var range = grid.getTileRangeForExtentAndZ(extent, zoom);
|
||||||
|
|
||||||
source.forEachLoadedTile(zoom, range, callback);
|
source.forEachLoadedTile(source.getProjection(), zoom, range, callback);
|
||||||
expect(callback.callCount).to.be(0);
|
expect(callback.callCount).to.be(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 3;
|
var zoom = 3;
|
||||||
var range = grid.getTileRangeForExtentAndZ(extent, zoom);
|
var range = grid.getTileRangeForExtentAndZ(extent, zoom);
|
||||||
|
|
||||||
source.forEachLoadedTile(zoom, range, callback);
|
source.forEachLoadedTile(source.getProjection(), zoom, range, callback);
|
||||||
expect(source.getTile.callCount).to.be(0);
|
expect(source.getTile.callCount).to.be(0);
|
||||||
source.getTile.restore();
|
source.getTile.restore();
|
||||||
});
|
});
|
||||||
@@ -55,7 +55,7 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 1;
|
var zoom = 1;
|
||||||
var range = new ol.TileRange(0, 1, 0, 1);
|
var range = new ol.TileRange(0, 1, 0, 1);
|
||||||
|
|
||||||
source.forEachLoadedTile(zoom, range, callback);
|
source.forEachLoadedTile(source.getProjection(), zoom, range, callback);
|
||||||
expect(callback.callCount).to.be(3);
|
expect(callback.callCount).to.be(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -71,9 +71,10 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 1;
|
var zoom = 1;
|
||||||
var range = new ol.TileRange(0, 1, 0, 1);
|
var range = new ol.TileRange(0, 1, 0, 1);
|
||||||
|
|
||||||
var covered = source.forEachLoadedTile(zoom, range, function() {
|
var covered = source.forEachLoadedTile(source.getProjection(), zoom,
|
||||||
return true;
|
range, function() {
|
||||||
});
|
return true;
|
||||||
|
});
|
||||||
expect(covered).to.be(true);
|
expect(covered).to.be(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -89,9 +90,10 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 1;
|
var zoom = 1;
|
||||||
var range = new ol.TileRange(0, 1, 0, 1);
|
var range = new ol.TileRange(0, 1, 0, 1);
|
||||||
|
|
||||||
var covered = source.forEachLoadedTile(zoom, range, function() {
|
var covered = source.forEachLoadedTile(source.getProjection(), zoom,
|
||||||
return true;
|
range, function() {
|
||||||
});
|
return true;
|
||||||
|
});
|
||||||
expect(covered).to.be(false);
|
expect(covered).to.be(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -107,9 +109,10 @@ describe('ol.source.Tile', function() {
|
|||||||
var zoom = 1;
|
var zoom = 1;
|
||||||
var range = new ol.TileRange(0, 1, 0, 1);
|
var range = new ol.TileRange(0, 1, 0, 1);
|
||||||
|
|
||||||
var covered = source.forEachLoadedTile(zoom, range, function() {
|
var covered = source.forEachLoadedTile(source.getProjection(), zoom,
|
||||||
return false;
|
range, function() {
|
||||||
});
|
return false;
|
||||||
|
});
|
||||||
expect(covered).to.be(false);
|
expect(covered).to.be(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user