From e14d8add85bfe42a2b7fb9a9cfd29b66662d99f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 9 Dec 2013 16:03:24 +0100 Subject: [PATCH] Add gutter support to TileUrlFunction --- src/ol/source/tilewmssource.js | 2 +- src/ol/tileurlfunction.js | 14 ++++++++++---- test/spec/ol/tileurlfunction.test.js | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ol/source/tilewmssource.js b/src/ol/source/tilewmssource.js index 8a5631277e..e6d72868d0 100644 --- a/src/ol/source/tilewmssource.js +++ b/src/ol/source/tilewmssource.js @@ -58,7 +58,7 @@ ol.source.TileWMS = function(options) { var tileUrlFunctions = goog.array.map( urls, function(url) { return ol.TileUrlFunction.createFromParamsFunction( - url, this.params_, ol.source.wms.getUrl); + url, this.params_, this.gutter_, ol.source.wms.getUrl); }, this); tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions( tileUrlFunctions); diff --git a/src/ol/tileurlfunction.js b/src/ol/tileurlfunction.js index c883fbfe16..008e609f39 100644 --- a/src/ol/tileurlfunction.js +++ b/src/ol/tileurlfunction.js @@ -84,14 +84,16 @@ ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { /** * @param {string} baseUrl Base URL (may have query data). - * @param {Object.} params to encode in the URL. + * @param {Object.} params Params to encode in the URL. + * @param {number} gutter Gutter value. * @param {function(this: ol.source.TileImage, string, Object., * ol.Extent, ol.Size, ol.proj.Projection)} paramsFunction params function. * @return {ol.TileUrlFunctionType} Tile URL function. */ ol.TileUrlFunction.createFromParamsFunction = - function(baseUrl, params, paramsFunction) { + function(baseUrl, params, gutter, paramsFunction) { var tmpExtent = ol.extent.createEmpty(); + var tmpSize = [0, 0]; return ( /** * @this {ol.source.TileImage} @@ -107,10 +109,14 @@ ol.TileUrlFunction.createFromParamsFunction = if (goog.isNull(tileGrid)) { tileGrid = ol.tilegrid.getForProjection(projection); } - var size = tileGrid.getTileSize(tileCoord.z); + var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileSize = tileGrid.getTileSize(tileCoord.z); + tmpSize[0] = tileSize[0] + (2 * gutter); + tmpSize[1] = tileSize[1] + (2 * gutter); var extent = tileGrid.getTileCoordExtent(tileCoord, tmpExtent); + ol.extent.buffer(extent, tileResolution * gutter); return paramsFunction.call(this, baseUrl, params, - extent, size, projection); + extent, tmpSize, projection); } }); }; diff --git a/test/spec/ol/tileurlfunction.test.js b/test/spec/ol/tileurlfunction.test.js index 68764b4cb6..6c0e5bcbdd 100644 --- a/test/spec/ol/tileurlfunction.test.js +++ b/test/spec/ol/tileurlfunction.test.js @@ -84,7 +84,7 @@ describe('ol.TileUrlFunction', function() { var fakeTileSource = {getTileGrid: function() {return null;}}; var params = {foo: 'bar'}; var tileUrlFunction = ol.TileUrlFunction.createFromParamsFunction( - 'url', params, paramsFunction); + 'url', params, 0, paramsFunction); it('calls the passed function with the correct arguments', function() { var args = tileUrlFunction.call(fakeTileSource, new ol.TileCoord(0, 0, 0), projection);