From b05193fa454a963b33e6c5965181abde9b45b7fa Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Tue, 28 Apr 2015 23:26:35 +0200 Subject: [PATCH] Replace ol.tilegrid.XYZ with an ol.tilegrid.createXYZ function --- examples/canvas-tiles.js | 5 +- examples/tile-vector.js | 9 +- examples/vector-esri-edit.js | 3 +- examples/vector-esri.js | 3 +- examples/vector-osm.js | 3 +- examples/vector-wfs.js | 3 +- examples/xyz-esri-4326-512.js | 2 +- src/ol/source/bingmapssource.js | 13 +- src/ol/source/tilejsonsource.js | 3 +- src/ol/source/tileutfgridsource.js | 3 +- src/ol/source/xyzsource.js | 6 +- src/ol/tilegrid/tilegrid.js | 50 +++--- src/ol/tilegrid/xyztilegrid.js | 130 ---------------- test/spec/ol/tilegrid/tilegrid.test.js | 26 ++++ test/spec/ol/tilegrid/xyztilegrid.test.js | 168 --------------------- test_rendering/spec/ol/layer/image.test.js | 5 +- 16 files changed, 79 insertions(+), 353 deletions(-) delete mode 100644 src/ol/tilegrid/xyztilegrid.js delete mode 100644 test/spec/ol/tilegrid/xyztilegrid.test.js diff --git a/examples/canvas-tiles.js b/examples/canvas-tiles.js index 1f46f51e0f..a3bf7004bb 100644 --- a/examples/canvas-tiles.js +++ b/examples/canvas-tiles.js @@ -5,7 +5,6 @@ goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.OSM'); goog.require('ol.source.TileDebug'); -goog.require('ol.tilegrid.XYZ'); var map = new ol.Map({ @@ -16,9 +15,7 @@ var map = new ol.Map({ new ol.layer.Tile({ source: new ol.source.TileDebug({ projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ - maxZoom: 22 - }) + tileGrid: ol.tilegrid.createXYZ({maxZoom: 22}) }) }) ], diff --git a/examples/tile-vector.js b/examples/tile-vector.js index 245e8db64c..40644545fd 100644 --- a/examples/tile-vector.js +++ b/examples/tile-vector.js @@ -7,13 +7,12 @@ goog.require('ol.source.TileVector'); goog.require('ol.style.Fill'); goog.require('ol.style.Stroke'); goog.require('ol.style.Style'); -goog.require('ol.tilegrid.XYZ'); var waterLayer = new ol.layer.Vector({ source: new ol.source.TileVector({ format: new ol.format.TopoJSON(), projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ + tileGrid: ol.tilegrid.createXYZ({ maxZoom: 19 }), url: 'http://{a-c}.tile.openstreetmap.us/' + @@ -31,7 +30,7 @@ var roadLayer = new ol.layer.Vector({ source: new ol.source.TileVector({ format: new ol.format.TopoJSON(), projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ + tileGrid: ol.tilegrid.createXYZ({ maxZoom: 19 }), url: 'http://{a-c}.tile.openstreetmap.us/' + @@ -87,7 +86,7 @@ var buildingLayer = new ol.layer.Vector({ defaultProjection: 'EPSG:4326' }), projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ + tileGrid: ol.tilegrid.createXYZ({ maxZoom: 19 }), url: 'http://{a-c}.tile.openstreetmap.us/' + @@ -106,7 +105,7 @@ var landuseLayer = new ol.layer.Vector({ defaultProjection: 'EPSG:4326' }), projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ + tileGrid: ol.tilegrid.createXYZ({ maxZoom: 19 }), url: 'http://{a-c}.tile.openstreetmap.us/' + diff --git a/examples/vector-esri-edit.js b/examples/vector-esri-edit.js index 5ebb58bf7f..d646f18b26 100644 --- a/examples/vector-esri-edit.js +++ b/examples/vector-esri-edit.js @@ -12,7 +12,6 @@ goog.require('ol.loadingstrategy'); goog.require('ol.proj'); goog.require('ol.source.Vector'); goog.require('ol.source.XYZ'); -goog.require('ol.tilegrid.XYZ'); var serviceUrl = 'http://services.arcgis.com/rOo16HdIMeOBI4Mb/arcgis/rest/' + @@ -45,7 +44,7 @@ var vectorSource = new ol.source.Vector({ } }}); }, - strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({ + strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({ tileSize: 512 })) }); diff --git a/examples/vector-esri.js b/examples/vector-esri.js index 0ba8581813..655062f372 100644 --- a/examples/vector-esri.js +++ b/examples/vector-esri.js @@ -11,7 +11,6 @@ goog.require('ol.source.XYZ'); goog.require('ol.style.Fill'); goog.require('ol.style.Stroke'); goog.require('ol.style.Style'); -goog.require('ol.tilegrid.XYZ'); var serviceUrl = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/' + @@ -91,7 +90,7 @@ var vectorSource = new ol.source.Vector({ } }}); }, - strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({ + strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({ tileSize: 512 })) }); diff --git a/examples/vector-osm.js b/examples/vector-osm.js index eb1f5659a1..30526090f5 100644 --- a/examples/vector-osm.js +++ b/examples/vector-osm.js @@ -12,7 +12,6 @@ goog.require('ol.style.Circle'); goog.require('ol.style.Fill'); goog.require('ol.style.Stroke'); goog.require('ol.style.Style'); -goog.require('ol.tilegrid.XYZ'); var styles = { 'amenity': { @@ -102,7 +101,7 @@ var vectorSource = new ol.source.Vector({ vectorSource.addFeatures(features); }); }, - strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({ + strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({ maxZoom: 19 })) }); diff --git a/examples/vector-wfs.js b/examples/vector-wfs.js index 47386c71d7..4604537bf9 100644 --- a/examples/vector-wfs.js +++ b/examples/vector-wfs.js @@ -8,7 +8,6 @@ goog.require('ol.source.BingMaps'); goog.require('ol.source.Vector'); goog.require('ol.style.Stroke'); goog.require('ol.style.Style'); -goog.require('ol.tilegrid.XYZ'); // format used to parse WFS GetFeature responses @@ -24,7 +23,7 @@ var vectorSource = new ol.source.Vector({ // parameter to the URL $.ajax({url: url, dataType: 'jsonp', jsonp: false}); }, - strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({ + strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({ maxZoom: 19 })) }); diff --git a/examples/xyz-esri-4326-512.js b/examples/xyz-esri-4326-512.js index c10c5d270b..45cc0fa316 100644 --- a/examples/xyz-esri-4326-512.js +++ b/examples/xyz-esri-4326-512.js @@ -35,7 +35,7 @@ var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ - /* ol.source.XYZ and ol.tilegrid.XYZ have no resolutions config */ + /* ol.source.XYZ and ol.tilegrid.TileGrid have no resolutions config */ source: new ol.source.TileImage({ attributions: [attribution], tileUrlFunction: function(tileCoord, pixelRatio, projection) { diff --git a/src/ol/source/bingmapssource.js b/src/ol/source/bingmapssource.js index 76656e9fec..e756fb8b11 100644 --- a/src/ol/source/bingmapssource.js +++ b/src/ol/source/bingmapssource.js @@ -12,7 +12,6 @@ goog.require('ol.proj'); goog.require('ol.source.State'); goog.require('ol.source.TileImage'); goog.require('ol.tilecoord'); -goog.require('ol.tilegrid.XYZ'); @@ -103,18 +102,20 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse = var maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_; var sourceProjection = this.getProjection(); - var tileGrid = new ol.tilegrid.XYZ({ - extent: ol.tilegrid.extentFromProjection(sourceProjection), + var extent = ol.tilegrid.extentFromProjection(sourceProjection); + var tileSize = resource.imageWidth == resource.imageHeight ? + resource.imageWidth : [resource.imageWidth, resource.imageHeight]; + var tileGrid = ol.tilegrid.createXYZ({ + extent: extent, minZoom: resource.zoomMin, maxZoom: maxZoom, - tileSize: resource.imageWidth == resource.imageHeight ? - resource.imageWidth : [resource.imageWidth, resource.imageHeight] + tileSize: tileSize }); this.tileGrid = tileGrid; var culture = this.culture_; this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( - tileGrid.createTileCoordTransform(), + ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid), ol.TileUrlFunction.createFromTileUrlFunctions( goog.array.map( resource.imageUrlSubdomains, diff --git a/src/ol/source/tilejsonsource.js b/src/ol/source/tilejsonsource.js index 609ce6267f..37dc0f63a0 100644 --- a/src/ol/source/tilejsonsource.js +++ b/src/ol/source/tilejsonsource.js @@ -17,7 +17,6 @@ goog.require('ol.extent'); goog.require('ol.proj'); goog.require('ol.source.State'); goog.require('ol.source.TileImage'); -goog.require('ol.tilegrid.XYZ'); @@ -69,7 +68,7 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) { } var minZoom = tileJSON.minzoom || 0; var maxZoom = tileJSON.maxzoom || 22; - var tileGrid = new ol.tilegrid.XYZ({ + var tileGrid = ol.tilegrid.createXYZ({ extent: ol.tilegrid.extentFromProjection(sourceProjection), maxZoom: maxZoom, minZoom: minZoom diff --git a/src/ol/source/tileutfgridsource.js b/src/ol/source/tileutfgridsource.js index 9e3bcee79f..549ad82d5c 100644 --- a/src/ol/source/tileutfgridsource.js +++ b/src/ol/source/tileutfgridsource.js @@ -13,7 +13,6 @@ goog.require('ol.extent'); goog.require('ol.proj'); goog.require('ol.source.State'); goog.require('ol.source.Tile'); -goog.require('ol.tilegrid.XYZ'); @@ -122,7 +121,7 @@ ol.source.TileUTFGrid.prototype.handleTileJSONResponse = function(tileJSON) { } var minZoom = tileJSON.minzoom || 0; var maxZoom = tileJSON.maxzoom || 22; - var tileGrid = new ol.tilegrid.XYZ({ + var tileGrid = ol.tilegrid.createXYZ({ extent: ol.tilegrid.extentFromProjection(sourceProjection), maxZoom: maxZoom, minZoom: minZoom diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js index afdeaeb7eb..2c60a6178e 100644 --- a/src/ol/source/xyzsource.js +++ b/src/ol/source/xyzsource.js @@ -3,7 +3,6 @@ goog.provide('ol.source.XYZ'); goog.require('ol.Attribution'); goog.require('ol.TileUrlFunction'); goog.require('ol.source.TileImage'); -goog.require('ol.tilegrid.XYZ'); @@ -20,7 +19,7 @@ ol.source.XYZ = function(options) { var projection = goog.isDef(options.projection) ? options.projection : 'EPSG:3857'; - var tileGrid = new ol.tilegrid.XYZ({ + var tileGrid = ol.tilegrid.createXYZ({ extent: ol.tilegrid.extentFromProjection(projection), maxZoom: options.maxZoom, tileSize: options.tileSize @@ -42,7 +41,8 @@ ol.source.XYZ = function(options) { * @private * @type {ol.TileCoordTransformType} */ - this.tileCoordTransform_ = tileGrid.createTileCoordTransform(); + this.tileCoordTransform_ = + ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid); if (goog.isDef(options.tileUrlFunction)) { this.setTileUrlFunction(options.tileUrlFunction); diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index 507fbbf614..0dcbafc964 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -534,36 +534,48 @@ ol.tilegrid.getForProjection = function(projection) { */ ol.tilegrid.createForExtent = function(extent, opt_maxZoom, opt_tileSize, opt_corner) { - var tileSize = goog.isDef(opt_tileSize) ? - ol.size.toSize(opt_tileSize) : ol.size.toSize(ol.DEFAULT_TILE_SIZE); - var corner = goog.isDef(opt_corner) ? opt_corner : ol.extent.Corner.BOTTOM_LEFT; var resolutions = ol.tilegrid.resolutionsFromExtent( - extent, opt_maxZoom, ol.size.toSize(tileSize)); - - var widths = new Array(resolutions.length); - var extentWidth = ol.extent.getWidth(extent); - for (var z = resolutions.length - 1; z >= 0; --z) { - widths[z] = extentWidth / tileSize[0] / resolutions[z]; - } + extent, opt_maxZoom, opt_tileSize); return new ol.tilegrid.TileGrid({ + extent: extent, origin: ol.extent.getCorner(extent, corner), resolutions: resolutions, - tileSize: goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE, - widths: widths + tileSize: opt_tileSize }); }; +/** + * Creates a tile grid with a standard XYZ tiling scheme. + * @param {olx.tilegrid.XYZOptions=} opt_options Tile grid options. + * @return {ol.tilegrid.TileGrid} Tile grid instance. + * @api + */ +ol.tilegrid.createXYZ = function(opt_options) { + var options = /** @type {olx.tilegrid.TileGridOptions} */ ({}); + goog.object.extend(options, goog.isDef(opt_options) ? + opt_options : /** @type {olx.tilegrid.XYZOptions} */ ({})); + if (!goog.isDef(options.extent)) { + options.extent = ol.proj.get('EPSG:3857').getExtent(); + } + options.resolutions = ol.tilegrid.resolutionsFromExtent( + options.extent, options.maxZoom, options.tileSize); + delete options.maxZoom; + return new ol.tilegrid.TileGrid(options); +}; + + /** * Create a resolutions array from an extent. A zoom factor of 2 is assumed. * @param {ol.Extent} extent Extent. * @param {number=} opt_maxZoom Maximum zoom level (default is * ol.DEFAULT_MAX_ZOOM). - * @param {ol.Size=} opt_tileSize Tile size (default uses ol.DEFAULT_TILE_SIZE). + * @param {number|ol.Size=} opt_tileSize Tile size (default uses + * ol.DEFAULT_TILE_SIZE). * @return {!Array.} Resolutions array. */ ol.tilegrid.resolutionsFromExtent = @@ -574,8 +586,8 @@ ol.tilegrid.resolutionsFromExtent = var height = ol.extent.getHeight(extent); var width = ol.extent.getWidth(extent); - var tileSize = goog.isDef(opt_tileSize) ? - opt_tileSize : ol.size.toSize(ol.DEFAULT_TILE_SIZE); + var tileSize = ol.size.toSize(goog.isDef(opt_tileSize) ? + opt_tileSize : ol.DEFAULT_TILE_SIZE); var maxResolution = Math.max( width / tileSize[0], height / tileSize[1]); @@ -643,12 +655,8 @@ ol.tilegrid.createOriginTopLeftTileCoordTransform = function(tileGrid) { } var z = tileCoord[0]; var fullTileRange = tileGrid.getFullTileRange(z); - var height; - if (goog.isNull(fullTileRange) || fullTileRange.minY < 0) { - height = 0; - } else { - height = fullTileRange.getHeight(); - } + var height = (goog.isNull(fullTileRange) || fullTileRange.minY < 0) ? + 0 : fullTileRange.getHeight(); return ol.tilecoord.createOrUpdate( z, tileCoord[1], height - tileCoord[2] - 1, opt_tileCoord); } diff --git a/src/ol/tilegrid/xyztilegrid.js b/src/ol/tilegrid/xyztilegrid.js deleted file mode 100644 index b10a398c67..0000000000 --- a/src/ol/tilegrid/xyztilegrid.js +++ /dev/null @@ -1,130 +0,0 @@ -goog.provide('ol.tilegrid.XYZ'); - -goog.require('goog.math'); -goog.require('ol'); -goog.require('ol.TileCoord'); -goog.require('ol.TileRange'); -goog.require('ol.extent'); -goog.require('ol.extent.Corner'); -goog.require('ol.proj'); -goog.require('ol.proj.EPSG3857'); -goog.require('ol.size'); -goog.require('ol.tilecoord'); -goog.require('ol.tilegrid.TileGrid'); - - - -/** - * @classdesc - * Set the grid pattern for sources accessing XYZ tiled-image servers. - * - * @constructor - * @extends {ol.tilegrid.TileGrid} - * @param {olx.tilegrid.XYZOptions} options XYZ options. - * @struct - * @api - */ -ol.tilegrid.XYZ = function(options) { - var extent = goog.isDef(options.extent) ? - options.extent : ol.proj.EPSG3857.EXTENT; - var tileSize; - if (goog.isDef(options.tileSize)) { - tileSize = ol.size.toSize(options.tileSize); - } - var resolutions = ol.tilegrid.resolutionsFromExtent( - extent, options.maxZoom, tileSize); - - goog.base(this, { - minZoom: options.minZoom, - origin: ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT), - resolutions: resolutions, - tileSize: options.tileSize - }); - -}; -goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid); - - -/** - * @inheritDoc - */ -ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { - var options = goog.isDef(opt_options) ? opt_options : {}; - var minZ = this.minZoom; - var maxZ = this.maxZoom; - /** @type {Array.} */ - var tileRangeByZ = null; - if (goog.isDef(options.extent)) { - tileRangeByZ = new Array(maxZ + 1); - var z; - for (z = 0; z <= maxZ; ++z) { - if (z < minZ) { - tileRangeByZ[z] = null; - } else { - tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z); - } - } - } - return ( - /** - * @param {ol.TileCoord} tileCoord Tile coordinate. - * @param {ol.proj.Projection} projection Projection. - * @param {ol.TileCoord=} opt_tileCoord Destination tile coordinate. - * @return {ol.TileCoord} Tile coordinate. - */ - function(tileCoord, projection, opt_tileCoord) { - var z = tileCoord[0]; - if (z < minZ || maxZ < z) { - return null; - } - var n = Math.pow(2, z); - var x = tileCoord[1]; - var y = tileCoord[2]; - if (y < -n || -1 < y) { - return null; - } - if (!goog.isNull(tileRangeByZ)) { - if (!tileRangeByZ[z].containsXY(x, y)) { - return null; - } - } - return ol.tilecoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); - }); -}; - - -/** - * @inheritDoc - */ -ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = - function(tileCoord, opt_tileRange) { - if (tileCoord[0] < this.maxZoom) { - var doubleX = 2 * tileCoord[1]; - var doubleY = 2 * tileCoord[2]; - return ol.TileRange.createOrUpdate( - doubleX, doubleX + 1, - doubleY, doubleY + 1, - opt_tileRange); - } else { - return null; - } -}; - - -/** - * @inheritDoc - */ -ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = - function(tileCoord, callback, opt_this, opt_tileRange) { - var tileRange = ol.TileRange.createOrUpdate( - 0, tileCoord[1], 0, tileCoord[2], opt_tileRange); - var z; - for (z = tileCoord[0] - 1; z >= this.minZoom; --z) { - tileRange.minX = tileRange.maxX >>= 1; - tileRange.minY = tileRange.maxY >>= 1; - if (callback.call(opt_this, z, tileRange)) { - return true; - } - } - return false; -}; diff --git a/test/spec/ol/tilegrid/tilegrid.test.js b/test/spec/ol/tilegrid/tilegrid.test.js index e476a58726..757959a982 100644 --- a/test/spec/ol/tilegrid/tilegrid.test.js +++ b/test/spec/ol/tilegrid/tilegrid.test.js @@ -442,6 +442,32 @@ describe('ol.tilegrid.TileGrid', function() { }); + describe('createXYZ()', function() { + + it('uses defaults', function() { + var tileGrid = ol.tilegrid.createXYZ(); + expect(tileGrid.getExtent()).to.eql( + ol.proj.get('EPSG:3857').getExtent()); + expect(tileGrid.getMinZoom()).to.equal(0); + expect(tileGrid.getMaxZoom()).to.equal(ol.DEFAULT_MAX_ZOOM); + expect(tileGrid.getTileSize()).to.equal(ol.DEFAULT_TILE_SIZE); + }); + + it('respects configuration options', function() { + var tileGrid = ol.tilegrid.createXYZ({ + extent: [10, 20, 30, 40], + minZoom: 1, + maxZoom: 2, + tileSize: 128 + }); + expect(tileGrid.getExtent()).to.eql([10, 20, 30, 40]); + expect(tileGrid.getMinZoom()).to.equal(1); + expect(tileGrid.getMaxZoom()).to.equal(2); + expect(tileGrid.getTileSize()).to.equal(128); + }); + + }); + describe('getForProjection', function() { it('gets the default tile grid for a projection', function() { diff --git a/test/spec/ol/tilegrid/xyztilegrid.test.js b/test/spec/ol/tilegrid/xyztilegrid.test.js deleted file mode 100644 index b82079d354..0000000000 --- a/test/spec/ol/tilegrid/xyztilegrid.test.js +++ /dev/null @@ -1,168 +0,0 @@ -goog.provide('ol.test.tilegrid.XYZ'); - - -describe('ol.tilegrid.XYZ', function() { - - var xyzTileGrid; - beforeEach(function() { - xyzTileGrid = new ol.tilegrid.XYZ({ - maxZoom: 22 - }); - }); - - describe('#getTileCoordChildTileRange()', function() { - - it('returns the tile range for one zoom level deeper', function() { - var range; - - range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 0]); - expect(range.minX).to.be(0); - expect(range.maxX).to.be(1); - expect(range.minY).to.be(0); - expect(range.maxY).to.be(1); - - range = xyzTileGrid.getTileCoordChildTileRange([0, 1, 0]); - expect(range.minX).to.be(2); - expect(range.maxX).to.be(3); - expect(range.minY).to.be(0); - expect(range.maxY).to.be(1); - - range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 1]); - expect(range.minX).to.be(0); - expect(range.maxX).to.be(1); - expect(range.minY).to.be(2); - expect(range.maxY).to.be(3); - - range = xyzTileGrid.getTileCoordChildTileRange([0, -1, 0]); - expect(range.minX).to.be(-2); - expect(range.maxX).to.be(-1); - expect(range.minY).to.be(0); - expect(range.maxY).to.be(1); - - range = xyzTileGrid.getTileCoordChildTileRange([0, 0, -1]); - expect(range.minX).to.be(0); - expect(range.maxX).to.be(1); - expect(range.minY).to.be(-2); - expect(range.maxY).to.be(-1); - }); - - it('returns null for z > maxZoom', function() { - var max = xyzTileGrid.maxZoom; - var range = xyzTileGrid.getTileCoordChildTileRange([max + 1, 0, 0]); - expect(range).to.be(null); - }); - - it('is like ol.tilegrid.TileGrid#getTileCoordChildTileRange()', function() { - var superMethod = ol.tilegrid.TileGrid.prototype - .getTileCoordChildTileRange.bind(xyzTileGrid); - - var coord, selfRange, superRange; - - coord = [0, 0, 0]; - selfRange = xyzTileGrid.getTileCoordChildTileRange(coord); - superRange = superMethod(coord); - expect(selfRange.minX).to.be(superRange.minX); - expect(selfRange.maxX).to.be(superRange.maxX); - expect(selfRange.minY).to.be(superRange.minY); - expect(selfRange.maxY).to.be(superRange.maxY); - - coord = [1, 2, 3]; - selfRange = xyzTileGrid.getTileCoordChildTileRange(coord); - superRange = superMethod(coord); - expect(selfRange.minX).to.be(superRange.minX); - expect(selfRange.maxX).to.be(superRange.maxX); - expect(selfRange.minY).to.be(superRange.minY); - expect(selfRange.maxY).to.be(superRange.maxY); - - }); - - }); - - describe('forEachTileCoordParentTileRange', function() { - - it('iterates as expected', function() { - - var tileCoord = [5, 11, 21]; - var zs = [], tileRanges = []; - xyzTileGrid.forEachTileCoordParentTileRange( - tileCoord, - function(z, tileRange) { - zs.push(z); - tileRanges.push(new ol.TileRange( - tileRange.minX, tileRange.maxX, - tileRange.minY, tileRange.maxY)); - return false; - }); - - expect(zs.length).to.eql(5); - expect(tileRanges.length).to.eql(5); - - expect(zs[0]).to.eql(4); - expect(tileRanges[0].minX).to.eql(5); - expect(tileRanges[0].maxX).to.eql(5); - expect(tileRanges[0].minY).to.eql(10); - expect(tileRanges[0].maxY).to.eql(10); - - expect(zs[1]).to.eql(3); - expect(tileRanges[1].minX).to.eql(2); - expect(tileRanges[1].maxX).to.eql(2); - expect(tileRanges[1].minY).to.eql(5); - expect(tileRanges[1].maxY).to.eql(5); - - expect(zs[2]).to.eql(2); - expect(tileRanges[2].minX).to.eql(1); - expect(tileRanges[2].maxX).to.eql(1); - expect(tileRanges[2].minY).to.eql(2); - expect(tileRanges[2].maxY).to.eql(2); - - expect(zs[3]).to.eql(1); - expect(tileRanges[3].minX).to.eql(0); - expect(tileRanges[3].maxX).to.eql(0); - expect(tileRanges[3].minY).to.eql(1); - expect(tileRanges[3].maxY).to.eql(1); - - expect(zs[4]).to.eql(0); - expect(tileRanges[4].minX).to.eql(0); - expect(tileRanges[4].maxX).to.eql(0); - expect(tileRanges[4].minY).to.eql(0); - expect(tileRanges[4].maxY).to.eql(0); - - }); - - }); - - describe('getResolution', function() { - - it('returns the correct resolution at the equator', function() { - // @see http://msdn.microsoft.com/en-us/library/aa940990.aspx - expect(xyzTileGrid.getResolution(0)).to.roughlyEqual(156543.04, 1e-2); - expect(xyzTileGrid.getResolution(1)).to.roughlyEqual(78271.52, 1e-2); - expect(xyzTileGrid.getResolution(2)).to.roughlyEqual(39135.76, 1e-2); - expect(xyzTileGrid.getResolution(3)).to.roughlyEqual(19567.88, 1e-2); - expect(xyzTileGrid.getResolution(4)).to.roughlyEqual(9783.94, 1e-2); - expect(xyzTileGrid.getResolution(5)).to.roughlyEqual(4891.97, 1e-2); - expect(xyzTileGrid.getResolution(6)).to.roughlyEqual(2445.98, 1e-2); - expect(xyzTileGrid.getResolution(7)).to.roughlyEqual(1222.99, 1e-2); - expect(xyzTileGrid.getResolution(8)).to.roughlyEqual(611.50, 1e-2); - expect(xyzTileGrid.getResolution(9)).to.roughlyEqual(305.75, 1e-2); - expect(xyzTileGrid.getResolution(10)).to.roughlyEqual(152.87, 1e-2); - expect(xyzTileGrid.getResolution(11)).to.roughlyEqual(76.44, 1e-2); - expect(xyzTileGrid.getResolution(12)).to.roughlyEqual(38.22, 1e-2); - expect(xyzTileGrid.getResolution(13)).to.roughlyEqual(19.11, 1e-2); - expect(xyzTileGrid.getResolution(14)).to.roughlyEqual(9.55, 1e-2); - expect(xyzTileGrid.getResolution(15)).to.roughlyEqual(4.78, 1e-2); - expect(xyzTileGrid.getResolution(16)).to.roughlyEqual(2.39, 1e-2); - expect(xyzTileGrid.getResolution(17)).to.roughlyEqual(1.19, 1e-2); - expect(xyzTileGrid.getResolution(18)).to.roughlyEqual(0.60, 1e-2); - expect(xyzTileGrid.getResolution(19)).to.roughlyEqual(0.30, 1e-2); - }); - - }); - -}); - - -goog.require('ol.TileCoord'); -goog.require('ol.TileRange'); -goog.require('ol.tilegrid.TileGrid'); -goog.require('ol.tilegrid.XYZ'); diff --git a/test_rendering/spec/ol/layer/image.test.js b/test_rendering/spec/ol/layer/image.test.js index 692090e015..4ba4c44eb0 100644 --- a/test_rendering/spec/ol/layer/image.test.js +++ b/test_rendering/spec/ol/layer/image.test.js @@ -55,8 +55,8 @@ describe('ol.rendering.layer.Image', function() { beforeEach(function() { source = new ol.source.ImageStatic({ url: 'spec/ol/data/tiles/osm/5/5/12.png', - imageExtent: new ol.tilegrid.XYZ({}).getTileCoordExtent( - [5, 5, -12 - 1]), + imageExtent: ol.tilegrid.createXYZ().getTileCoordExtent( + [5, 5, 32 - 12 - 1]), projection: ol.proj.get('EPSG:3857') }); }); @@ -91,4 +91,3 @@ goog.require('ol.Map'); goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.source.ImageStatic'); -goog.require('ol.tilegrid.XYZ');