From 0085623eeee85582d9875d28ceca0a4abd2a5d47 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 13:37:12 +0100 Subject: [PATCH 1/7] Add ol.TileLoadFunctionType --- src/ol/tileloadfunction.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/ol/tileloadfunction.js diff --git a/src/ol/tileloadfunction.js b/src/ol/tileloadfunction.js new file mode 100644 index 0000000000..f1f527066f --- /dev/null +++ b/src/ol/tileloadfunction.js @@ -0,0 +1,7 @@ +goog.provide('ol.TileLoadFunctionType'); + + +/** + * @typedef {function(ol.ImageTile, string)} + */ +ol.TileLoadFunctionType; From 6896e920f9eeed2434527bcb6cb2a898549f1961 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 13:39:42 +0100 Subject: [PATCH 2/7] Allow tile load function to be overridden --- src/ol/imagetile.js | 13 +++++++++++-- src/ol/source/tileimagesource.js | 21 ++++++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/ol/imagetile.js b/src/ol/imagetile.js index 8b97d630b5..6457d7458f 100644 --- a/src/ol/imagetile.js +++ b/src/ol/imagetile.js @@ -7,6 +7,7 @@ goog.require('goog.events.EventType'); goog.require('goog.object'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); +goog.require('ol.TileLoadFunctionType'); goog.require('ol.TileState'); @@ -18,8 +19,10 @@ goog.require('ol.TileState'); * @param {ol.TileState} state State. * @param {string} src Image source URI. * @param {?string} crossOrigin Cross origin. + * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function. */ -ol.ImageTile = function(tileCoord, state, src, crossOrigin) { +ol.ImageTile = + function(tileCoord, state, src, crossOrigin, tileLoadFunction) { goog.base(this, tileCoord, state); @@ -52,6 +55,12 @@ ol.ImageTile = function(tileCoord, state, src, crossOrigin) { */ this.imageListenerKeys_ = null; + /** + * @private + * @type {ol.TileLoadFunctionType} + */ + this.tileLoadFunction_ = tileLoadFunction; + }; goog.inherits(ol.ImageTile, ol.Tile); @@ -127,7 +136,7 @@ ol.ImageTile.prototype.load = function() { goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this) ]; - this.image_.src = this.src_; + this.tileLoadFunction_(this, this.src_); } }; diff --git a/src/ol/source/tileimagesource.js b/src/ol/source/tileimagesource.js index 338fbc5aa6..6a50826732 100644 --- a/src/ol/source/tileimagesource.js +++ b/src/ol/source/tileimagesource.js @@ -7,6 +7,7 @@ goog.require('ol.ImageTile'); goog.require('ol.Tile'); goog.require('ol.TileCache'); goog.require('ol.TileCoord'); +goog.require('ol.TileLoadFunctionType'); goog.require('ol.TileState'); goog.require('ol.TileUrlFunction'); goog.require('ol.TileUrlFunctionType'); @@ -22,6 +23,7 @@ goog.require('ol.tilegrid.TileGrid'); * opaque: (boolean|undefined), * projection: ol.proj.ProjectionLike, * tileGrid: (ol.tilegrid.TileGrid|undefined), + * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * tileUrlFunction: (ol.TileUrlFunctionType|undefined)}} */ ol.source.TileImageOptions; @@ -65,10 +67,26 @@ ol.source.TileImage = function(options) { */ this.tileCache_ = new ol.TileCache(); + /** + * @private + * @type {ol.TileLoadFunctionType} + */ + this.tileLoadFunction_ = goog.isDef(options.tileLoadFunction) ? + options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction; + }; goog.inherits(ol.source.TileImage, ol.source.Tile); +/** + * @param {ol.ImageTile} imageTile Image tile. + * @param {string} src Source. + */ +ol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) { + imageTile.getImage().src = src; +}; + + /** * @inheritDoc */ @@ -100,7 +118,8 @@ ol.source.TileImage.prototype.getTile = function(z, x, y, projection) { tileCoord, goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY, goog.isDef(tileUrl) ? tileUrl : '', - this.crossOrigin_); + this.crossOrigin_, + this.tileLoadFunction_); this.tileCache_.set(tileCoordKey, tile); return tile; } From f3d5a5c37b243e084350ed509eda841dbe2190fe Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 13:40:07 +0100 Subject: [PATCH 3/7] Add tileLoadFunction option to ol.source.XYZ --- src/objectliterals.jsdoc | 2 ++ src/ol/source/xyzsource.js | 1 + 2 files changed, 3 insertions(+) diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index 0813116336..f286244ff9 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -616,6 +616,8 @@ * @property {number|undefined} maxZoom Optional max zoom level. The default is * 18. * @property {number|undefined} minZoom Unsupported (TODO: remove this). + * @property {ol.TileLoadFunctionType|undefined} tileLoadFunction Optional + * function to load a tile given a URL. * @property {ol.TileUrlFunctionType|undefined} tileUrlFunction Optional * function to get tile URL given a tile coordinate and the projection. * Required if url or urls are not provided. diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js index 51e5f43080..f25339064b 100644 --- a/src/ol/source/xyzsource.js +++ b/src/ol/source/xyzsource.js @@ -31,6 +31,7 @@ ol.source.XYZ = function(options) { logo: options.logo, projection: projection, tileGrid: tileGrid, + tileLoadFunction: options.tileLoadFunction, tileUrlFunction: ol.TileUrlFunction.nullTileUrlFunction }); From 9397720c8e3773fd458feb5725896cefc0c22cdc Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 13:54:28 +0100 Subject: [PATCH 4/7] Export ol.Tile#getTileCoord --- src/ol/tile.exports | 1 + src/ol/tile.js | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 src/ol/tile.exports diff --git a/src/ol/tile.exports b/src/ol/tile.exports new file mode 100644 index 0000000000..33b1b0fdc8 --- /dev/null +++ b/src/ol/tile.exports @@ -0,0 +1 @@ +@exportProperty ol.Tile.prototype.getTileCoord diff --git a/src/ol/tile.js b/src/ol/tile.js index c343c5b908..9b35b5ec2d 100644 --- a/src/ol/tile.js +++ b/src/ol/tile.js @@ -70,6 +70,14 @@ ol.Tile.prototype.getKey = function() { }; +/** + * @return {ol.TileCoord} + */ +ol.Tile.prototype.getTileCoord = function() { + return this.tileCoord; +}; + + /** * @return {ol.TileState} State. */ From 8ea6a50f037cf099ea9f80e9e4c3f6a57bdf46e9 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 14:21:09 +0100 Subject: [PATCH 5/7] Add ol.TileCoord#getZXY --- src/ol/tilecoord.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/ol/tilecoord.js b/src/ol/tilecoord.js index 66ce92882d..7d7b74f869 100644 --- a/src/ol/tilecoord.js +++ b/src/ol/tilecoord.js @@ -1,6 +1,7 @@ goog.provide('ol.TileCoord'); goog.require('goog.array'); +goog.require('goog.asserts'); /** @@ -113,6 +114,23 @@ ol.TileCoord.getKeyZXY = function(z, x, y) { }; +/** + * @param {Array.=} opt_result Optional array to reuse. + * @return {Array.} Array of z, x, y. + */ +ol.TileCoord.prototype.getZXY = function(opt_result) { + if (goog.isDef(opt_result)) { + goog.asserts.assert(opt_result.length == 3); + opt_result[0] = this.z; + opt_result[1] = this.x; + opt_result[2] = this.y; + return opt_result; + } else { + return [this.z, this.x, this.y]; + } +}; + + /** * @return {number} Hash. */ From 004898e4622afd9138840aa9f60cc2c0e59829b5 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 14:21:25 +0100 Subject: [PATCH 6/7] Export ol.TileCoord#getZXY --- src/ol/tilecoord.exports | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/ol/tilecoord.exports diff --git a/src/ol/tilecoord.exports b/src/ol/tilecoord.exports new file mode 100644 index 0000000000..1719d37b9b --- /dev/null +++ b/src/ol/tilecoord.exports @@ -0,0 +1 @@ +@exportProperty ol.TileCoord.prototype.getZXY From 293ccfda8a3fee0ac9d5b48a357780841368483e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Sep 2013 15:33:22 +0100 Subject: [PATCH 7/7] Export ol.ImageTile#getImage --- src/ol/imagetile.exports | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/ol/imagetile.exports diff --git a/src/ol/imagetile.exports b/src/ol/imagetile.exports new file mode 100644 index 0000000000..25d191acba --- /dev/null +++ b/src/ol/imagetile.exports @@ -0,0 +1 @@ +@exportProperty ol.ImageTile.prototype.getImage