diff --git a/externs/olx.js b/externs/olx.js index 112749c89f..322808dd3c 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -5358,6 +5358,7 @@ olx.source.WMTSOptions.prototype.wrapX; * projection: ol.proj.ProjectionLike, * maxZoom: (number|undefined), * minZoom: (number|undefined), + * tileGrid: (ol.tilegrid.TileGrid|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * tilePixelRatio: (number|undefined), * tileSize: (number|ol.Size|undefined), @@ -5422,6 +5423,14 @@ olx.source.XYZOptions.prototype.maxZoom; olx.source.XYZOptions.prototype.minZoom; +/** + * Tile grid. + * @type {ol.tilegrid.TileGrid} + * @api + */ +olx.source.XYZOptions.prototype.tileGrid; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js index 907200328e..3233729166 100644 --- a/src/ol/source/xyzsource.js +++ b/src/ol/source/xyzsource.js @@ -19,11 +19,12 @@ ol.source.XYZ = function(options) { var projection = goog.isDef(options.projection) ? options.projection : 'EPSG:3857'; - var tileGrid = ol.tilegrid.createXYZ({ - extent: ol.tilegrid.extentFromProjection(projection), - maxZoom: options.maxZoom, - tileSize: options.tileSize - }); + var tileGrid = goog.isDef(options.tileGrid) ? options.tileGrid : + ol.tilegrid.createXYZ({ + extent: ol.tilegrid.extentFromProjection(projection), + maxZoom: options.maxZoom, + tileSize: options.tileSize + }); goog.base(this, { attributions: options.attributions, diff --git a/test/spec/ol/source/xyzsource.test.js b/test/spec/ol/source/xyzsource.test.js index 79d5715b30..5bc46a6d84 100644 --- a/test/spec/ol/source/xyzsource.test.js +++ b/test/spec/ol/source/xyzsource.test.js @@ -5,6 +5,14 @@ describe('ol.source.XYZ', function() { describe('constructor', function() { + it('can be constructed with a custom tile grid', function() { + var tileGrid = ol.tilegrid.createXYZ(); + var tileSource = new ol.source.XYZ({ + tileGrid: tileGrid + }); + expect(tileSource.getTileGrid()).to.be(tileGrid); + }); + it('can be constructed with a custom tile size', function() { var tileSource = new ol.source.XYZ({ tileSize: 512