Make tile pre-loading a per-layer option
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
@exportClass ol.layer.TileLayer ol.layer.LayerOptions
|
@exportClass ol.layer.TileLayer ol.layer.TileLayerOptions
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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) &&
|
||||||
|
|||||||
Reference in New Issue
Block a user