Make tile pre-loading a per-layer option

This commit is contained in:
Tom Payne
2013-03-27 13:55:14 +01:00
parent 1d22d2fdde
commit 494d61250e
7 changed files with 61 additions and 17 deletions

View File

@@ -100,6 +100,16 @@
@exportObjectLiteralProperty ol.layer.LayerOptions.source ol.source.Source @exportObjectLiteralProperty ol.layer.LayerOptions.source ol.source.Source
@exportObjectLiteralProperty ol.layer.LayerOptions.visible boolean|undefined @exportObjectLiteralProperty ol.layer.LayerOptions.visible boolean|undefined
@exportObjectLiteral ol.layer.TileLayerOptions
@exportObjectLiteralProperty ol.layer.TileLayerOptions.brightness number|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.contrast number|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.hue number|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.opacity number|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.preload boolean|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.saturation number|undefined
@exportObjectLiteralProperty ol.layer.TileLayerOptions.source ol.source.Source
@exportObjectLiteralProperty ol.layer.TileLayerOptions.visible boolean|undefined
@exportObjectLiteral ol.layer.VectorLayerOptions @exportObjectLiteral ol.layer.VectorLayerOptions
@exportObjectLiteralProperty ol.layer.VectorLayerOptions.opacity number|undefined @exportObjectLiteralProperty ol.layer.VectorLayerOptions.opacity number|undefined
@exportObjectLiteralProperty ol.layer.VectorLayerOptions.source ol.source.Source @exportObjectLiteralProperty ol.layer.VectorLayerOptions.source ol.source.Source

View File

@@ -1 +1 @@
@exportClass ol.layer.TileLayer ol.layer.LayerOptions @exportClass ol.layer.TileLayer ol.layer.TileLayerOptions

View File

@@ -4,21 +4,58 @@ goog.require('ol.layer.Layer');
goog.require('ol.source.TileSource'); goog.require('ol.source.TileSource');
/**
* @enum {string}
*/
ol.layer.TileLayerProperty = {
PRELOAD: 'preload'
};
/** /**
* @constructor * @constructor
* @extends {ol.layer.Layer} * @extends {ol.layer.Layer}
* @param {ol.layer.LayerOptions} layerOptions Layer options. * @param {ol.layer.TileLayerOptions} options Options.
*/ */
ol.layer.TileLayer = function(layerOptions) { ol.layer.TileLayer = function(options) {
goog.base(this, layerOptions);
goog.base(this, options);
this.setPreload(
goog.isDef(options.preload) ? options.preload : false);
}; };
goog.inherits(ol.layer.TileLayer, ol.layer.Layer); goog.inherits(ol.layer.TileLayer, ol.layer.Layer);
/**
* @return {boolean} Preload.
*/
ol.layer.TileLayer.prototype.getPreload = function() {
return /** @type {boolean} */ (this.get(ol.layer.TileLayerProperty.PRELOAD));
};
goog.exportProperty(
ol.layer.TileLayer.prototype,
'getPreload',
ol.layer.TileLayer.prototype.getPreload);
/** /**
* @return {ol.source.TileSource} Source. * @return {ol.source.TileSource} Source.
*/ */
ol.layer.TileLayer.prototype.getTileSource = function() { ol.layer.TileLayer.prototype.getTileSource = function() {
return /** @type {ol.source.TileSource} */ (this.getSource()); return /** @type {ol.source.TileSource} */ (this.getSource());
}; };
/**
* @param {boolean} preload Preload.
*/
ol.layer.TileLayer.prototype.setPreload = function(preload) {
this.set(ol.layer.TileLayerProperty.PRELOAD, preload);
};
goog.exportProperty(
ol.layer.TileLayer.prototype,
'setPreload',
ol.layer.TileLayer.prototype.setPreload);

View File

@@ -285,8 +285,8 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
} }
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid( this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent,
frameState, tileSource, tileGrid, projection, extent, z); z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource); this.scheduleExpireCache(frameState, tileSource);
var transform = this.transform_; var transform = this.transform_;

View File

@@ -218,8 +218,8 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
} }
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid( this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent,
frameState, tileSource, tileGrid, projection, extent, z); z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource); this.scheduleExpireCache(frameState, tileSource);
}; };

View File

@@ -17,12 +17,6 @@ goog.require('ol.layer.LayerState');
goog.require('ol.source.TileSource'); goog.require('ol.source.TileSource');
/**
* @define {boolean} Preemptively load low resolution tiles.
*/
ol.PREEMPTIVELY_LOAD_LOW_RESOLUTION_TILES = true;
/** /**
* @constructor * @constructor
@@ -297,13 +291,15 @@ ol.renderer.Layer.prototype.snapCenterToPixel =
* @param {ol.Projection} projection Projection. * @param {ol.Projection} projection Projection.
* @param {ol.Extent} extent Extent. * @param {ol.Extent} extent Extent.
* @param {number} currentZ Current Z. * @param {number} currentZ Current Z.
* @param {boolean} preload Preload low resolution tiles.
* @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback. * @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback.
* @param {T=} opt_obj Object. * @param {T=} opt_obj Object.
* @protected * @protected
* @template T * @template T
*/ */
ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, ol.renderer.Layer.prototype.manageTilePyramid = function(
tileGrid, projection, extent, currentZ, opt_tileCallback, opt_obj) { frameState, tileSource, tileGrid, projection, extent, currentZ, preload,
opt_tileCallback, opt_obj) {
var tileSourceKey = goog.getUid(tileSource).toString(); var tileSourceKey = goog.getUid(tileSource).toString();
if (!(tileSourceKey in frameState.wantedTiles)) { if (!(tileSourceKey in frameState.wantedTiles)) {
frameState.wantedTiles[tileSourceKey] = {}; frameState.wantedTiles[tileSourceKey] = {};
@@ -317,7 +313,7 @@ ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource,
tileResolution = tileGrid.getResolution(z); tileResolution = tileGrid.getResolution(z);
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) {
if (ol.PREEMPTIVELY_LOAD_LOW_RESOLUTION_TILES || z == currentZ) { if (preload || z == currentZ) {
tile = tileSource.getTile(z, x, y, tileGrid, projection); tile = tileSource.getTile(z, x, y, tileGrid, projection);
if (tile.getState() == ol.TileState.IDLE) { if (tile.getState() == ol.TileState.IDLE) {
wantedTiles[tile.tileCoord.toString()] = true; wantedTiles[tile.tileCoord.toString()] = true;

View File

@@ -269,6 +269,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
var tileTextureQueue = mapRenderer.getTileTextureQueue(); var tileTextureQueue = mapRenderer.getTileTextureQueue();
this.manageTilePyramid( this.manageTilePyramid(
frameState, tileSource, tileGrid, projection, extent, z, frameState, tileSource, tileGrid, projection, extent, z,
tileLayer.getPreload(),
function(tile) { function(tile) {
if (tile.getState() == ol.TileState.LOADED && if (tile.getState() == ol.TileState.LOADED &&
!mapRenderer.isTileTextureLoaded(tile) && !mapRenderer.isTileTextureLoaded(tile) &&