diff --git a/src/ol/loadingstrategy.js b/src/ol/loadingstrategy.js index d674baa3f3..418fc62282 100644 --- a/src/ol/loadingstrategy.js +++ b/src/ol/loadingstrategy.js @@ -46,11 +46,12 @@ ol.loadingstrategy.createTile = function(tileGrid) { var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); /** @type {Array.} */ var extents = []; - var tileCoord = new ol.TileCoord(z, 0, 0); - for (tileCoord.x = tileRange.minX; tileCoord.x <= tileRange.maxX; - ++tileCoord.x) { - for (tileCoord.y = tileRange.minY; tileCoord.y <= tileRange.maxY; - ++tileCoord.y) { + /** @type {ol.TileCoord} */ + var tileCoord = [z, 0, 0]; + for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX; + ++tileCoord[1]) { + for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY; + ++tileCoord[2]) { extents.push(tileGrid.getTileCoordExtent(tileCoord)); } } diff --git a/src/ol/map.js b/src/ol/map.js index 3fdbc5bbf4..6e15347e20 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -58,6 +58,7 @@ goog.require('ol.renderer.canvas.Map'); goog.require('ol.renderer.dom.Map'); goog.require('ol.renderer.webgl.Map'); goog.require('ol.structs.PriorityQueue'); +goog.require('ol.tilecoord'); goog.require('ol.vec.Mat4'); @@ -816,7 +817,7 @@ ol.Map.prototype.getTilePriority = if (goog.isNull(frameState) || !(tileSourceKey in frameState.wantedTiles)) { return ol.structs.PriorityQueue.DROP; } - var coordKey = tile.tileCoord.toString(); + var coordKey = ol.tilecoord.toString(tile.tileCoord); if (!frameState.wantedTiles[tileSourceKey][coordKey]) { return ol.structs.PriorityQueue.DROP; } diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index 6fd8025e35..bdab178548 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -8,7 +8,6 @@ goog.require('goog.asserts'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); goog.require('ol.Size'); -goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.TileState'); goog.require('ol.dom'); @@ -17,6 +16,7 @@ goog.require('ol.layer.Tile'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); goog.require('ol.source.Tile'); +goog.require('ol.tilecoord'); goog.require('ol.vec.Mat4'); @@ -299,7 +299,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = if (tileState == ol.TileState.LOADED || tileState == ol.TileState.EMPTY || (tileState == ol.TileState.ERROR && !useInterimTilesOnError)) { - tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + tilesToDrawByZ[z][ol.tilecoord.toString(tile.tileCoord)] = tile; continue; } @@ -322,8 +322,8 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = var i, ii; for (i = 0, ii = tilesToClear.length; i < ii; ++i) { tile = tilesToClear[i]; - x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); - y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + x = tilePixelSize * (tile.tileCoord[1] - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord[2]); context.clearRect(x, y, tilePixelSize, tilePixelSize); } @@ -332,7 +332,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = goog.array.sort(zs); var opaque = tileSource.getOpaque(); var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent( - new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), + [z, canvasTileRange.minX, canvasTileRange.maxY], tmpExtent)); var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw; var ix, iy, interimTileExtent, interimTileRange, maxX, maxY; @@ -346,11 +346,11 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = for (tileCoordKey in tilesToDraw) { tile = tilesToDraw[tileCoordKey]; index = - (tile.tileCoord.y - canvasTileRange.minY) * canvasTileRangeWidth + - (tile.tileCoord.x - canvasTileRange.minX); + (tile.tileCoord[2] - canvasTileRange.minY) * canvasTileRangeWidth + + (tile.tileCoord[1] - canvasTileRange.minX); if (this.renderedTiles_[index] != tile) { - x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); - y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + x = tilePixelSize * (tile.tileCoord[1] - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord[2]); tileState = tile.getState(); if (tileState == ol.TileState.EMPTY || (tileState == ol.TileState.ERROR && !useInterimTilesOnError) || diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index cb6c14dda9..422820df9a 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -22,6 +22,7 @@ goog.require('ol.extent'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.dom.Layer'); goog.require('ol.source.Tile'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); goog.require('ol.vec.Mat4'); @@ -141,7 +142,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = tile = tileSource.getTile(z, x, y, pixelRatio, projection); tileState = tile.getState(); if (tileState == ol.TileState.LOADED) { - tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + tilesToDrawByZ[z][ol.tilecoord.toString(tile.tileCoord)] = tile; continue; } else if (tileState == ol.TileState.EMPTY || (tileState == ol.TileState.ERROR && @@ -320,7 +321,7 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { * @private * @type {number} */ - this.resolution_ = tileGrid.getResolution(tileCoordOrigin.z); + this.resolution_ = tileGrid.getResolution(tileCoordOrigin[0]); /** * @private @@ -349,12 +350,15 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { */ ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile, tileGutter) { var tileCoord = tile.tileCoord; - goog.asserts.assert(tileCoord.z == this.tileCoordOrigin_.z); - var tileCoordKey = tileCoord.toString(); + var tileCoordZ = tileCoord[0]; + var tileCoordX = tileCoord[1]; + var tileCoordY = tileCoord[2]; + goog.asserts.assert(tileCoordZ == this.tileCoordOrigin_[0]); + var tileCoordKey = ol.tilecoord.toString(tileCoord); if (tileCoordKey in this.tiles_) { return; } - var tileSize = this.tileGrid_.getTileSize(tileCoord.z); + var tileSize = this.tileGrid_.getTileSize(tileCoordZ); var image = tile.getImage(this); var imageStyle = image.style; // Bootstrap sets the style max-width: 100% for all images, which @@ -383,9 +387,9 @@ ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile, tileGutter) { } tileElementStyle.position = 'absolute'; tileElementStyle.left = - ((tileCoord.x - this.tileCoordOrigin_.x) * tileSize) + 'px'; + ((tileCoordX - this.tileCoordOrigin_[1]) * tileSize) + 'px'; tileElementStyle.top = - ((this.tileCoordOrigin_.y - tileCoord.y) * tileSize) + 'px'; + ((this.tileCoordOrigin_[2] - tileCoordY) * tileSize) + 'px'; if (goog.isNull(this.documentFragment_)) { this.documentFragment_ = document.createDocumentFragment(); } @@ -432,7 +436,7 @@ ol.renderer.dom.TileLayerZ_.prototype.getResolution = function() { ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent, opt_tileRange) { var tileRange = this.tileGrid_.getTileRangeForExtentAndZ( - extent, this.tileCoordOrigin_.z, opt_tileRange); + extent, this.tileCoordOrigin_[0], opt_tileRange); /** @type {Array.} */ var tilesToRemove = []; var tile, tileCoordKey; @@ -445,7 +449,7 @@ ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = var i, ii; for (i = 0, ii = tilesToRemove.length; i < ii; ++i) { tile = tilesToRemove[i]; - tileCoordKey = tile.tileCoord.toString(); + tileCoordKey = ol.tilecoord.toString(tile.tileCoord); goog.dom.removeNode(tile.getImage(this)); delete this.tiles_[tileCoordKey]; } diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index f5ab656047..e1a902b729 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -10,6 +10,7 @@ goog.require('ol.layer.LayerState'); goog.require('ol.source.Source'); goog.require('ol.source.State'); goog.require('ol.source.Tile'); +goog.require('ol.tilecoord'); @@ -282,7 +283,7 @@ ol.renderer.Layer.prototype.manageTilePyramid = function( if (currentZ - z <= preload) { tile = tileSource.getTile(z, x, y, pixelRatio, projection); if (tile.getState() == ol.TileState.IDLE) { - wantedTiles[tile.tileCoord.toString()] = true; + wantedTiles[ol.tilecoord.toString(tile.tileCoord)] = true; if (!tileQueue.isKeyQueued(tile.getKey())) { tileQueue.enqueue([tile, tileSourceKey, tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]); diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index bfbae29cf8..fa74f38204 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -18,6 +18,7 @@ goog.require('ol.renderer.webgl.Layer'); goog.require('ol.renderer.webgl.tilelayer.shader'); goog.require('ol.source.Tile'); goog.require('ol.structs.Buffer'); +goog.require('ol.tilecoord'); @@ -222,7 +223,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = tileState = tile.getState(); if (tileState == ol.TileState.LOADED) { if (mapRenderer.isTileTextureLoaded(tile)) { - tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + tilesToDrawByZ[z][ol.tilecoord.toString(tile.tileCoord)] = tile; continue; } } else if (tileState == ol.TileState.EMPTY || @@ -300,7 +301,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = tileTextureQueue.enqueue([ tile, tileGrid.getTileCoordCenter(tile.tileCoord), - tileGrid.getResolution(tile.tileCoord.z), + tileGrid.getResolution(tile.tileCoord[0]), tilePixelSize, tileGutter * pixelRatio ]); } diff --git a/src/ol/source/bingmapssource.js b/src/ol/source/bingmapssource.js index 5aa84b6493..bccce2b375 100644 --- a/src/ol/source/bingmapssource.js +++ b/src/ol/source/bingmapssource.js @@ -12,6 +12,7 @@ goog.require('ol.extent'); goog.require('ol.proj'); goog.require('ol.source.State'); goog.require('ol.source.TileImage'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.XYZ'); @@ -120,7 +121,7 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse = return undefined; } else { return imageUrl.replace( - '{quadkey}', tileCoord.quadKey()); + '{quadkey}', ol.tilecoord.quadKey(tileCoord)); } }); }))); diff --git a/src/ol/source/tiledebugsource.js b/src/ol/source/tiledebugsource.js index db1dbb4f3d..79d05fc58e 100644 --- a/src/ol/source/tiledebugsource.js +++ b/src/ol/source/tiledebugsource.js @@ -6,6 +6,7 @@ goog.require('ol.TileCoord'); goog.require('ol.TileState'); goog.require('ol.dom'); goog.require('ol.source.Tile'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); @@ -25,7 +26,7 @@ ol.DebugTile_ = function(tileCoord, tileGrid) { * @private * @type {number} */ - this.tileSize_ = tileGrid.getTileSize(tileCoord.z); + this.tileSize_ = tileGrid.getTileSize(tileCoord[0]); /** * @private @@ -56,7 +57,8 @@ ol.DebugTile_.prototype.getImage = function(opt_context) { context.textAlign = 'center'; context.textBaseline = 'middle'; context.font = '24px sans-serif'; - context.fillText(this.tileCoord.toString(), tileSize / 2, tileSize / 2); + context.fillText(ol.tilecoord.toString(this.tileCoord), + tileSize / 2, tileSize / 2); this.canvasByContext_[key] = context.canvas; return context.canvas; @@ -121,7 +123,7 @@ ol.source.TileDebug.prototype.getTile = function(z, x, y) { if (this.tileCache_.containsKey(tileCoordKey)) { return /** @type {!ol.DebugTile_} */ (this.tileCache_.get(tileCoordKey)); } else { - var tile = new ol.DebugTile_(new ol.TileCoord(z, x, y), this.tileGrid); + var tile = new ol.DebugTile_([z, x, y], this.tileGrid); this.tileCache_.set(tileCoordKey, tile); return tile; } diff --git a/src/ol/source/tileimagesource.js b/src/ol/source/tileimagesource.js index ffacae74f1..94b00ed777 100644 --- a/src/ol/source/tileimagesource.js +++ b/src/ol/source/tileimagesource.js @@ -110,7 +110,7 @@ ol.source.TileImage.prototype.getTile = return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey)); } else { goog.asserts.assert(projection); - var tileCoord = new ol.TileCoord(z, x, y); + var tileCoord = [z, x, y]; var tileUrl = this.tileUrlFunction(tileCoord, pixelRatio, projection); var tile = new this.tileClass( tileCoord, diff --git a/src/ol/source/tilesource.js b/src/ol/source/tilesource.js index a29f5358ea..e014c0fdb7 100644 --- a/src/ol/source/tilesource.js +++ b/src/ol/source/tilesource.js @@ -4,9 +4,9 @@ goog.provide('ol.source.TileOptions'); goog.require('goog.functions'); goog.require('ol.Attribution'); goog.require('ol.Extent'); -goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.source.Source'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); @@ -133,7 +133,7 @@ ol.source.Tile.prototype.getGutter = function() { * @return {string} Key. * @protected */ -ol.source.Tile.prototype.getKeyZXY = ol.TileCoord.getKeyZXY; +ol.source.Tile.prototype.getKeyZXY = ol.tilecoord.getKeyZXY; /** diff --git a/src/ol/source/tilevectorsource.js b/src/ol/source/tilevectorsource.js index 6b8fb5fd2f..047dfdf67d 100644 --- a/src/ol/source/tilevectorsource.js +++ b/src/ol/source/tilevectorsource.js @@ -184,15 +184,15 @@ ol.source.TileVector.prototype.loadFeatures = var tiles = this.tiles_; var z = tileGrid.getZForResolution(resolution); var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); - var tileCoord = new ol.TileCoord(z, 0, 0); + var tileCoord = [z, 0, 0]; var x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) { var tileKey = this.getTileKeyZXY_(z, x, y); if (!(tileKey in tiles)) { - tileCoord.z = z; - tileCoord.x = x; - tileCoord.y = y; + tileCoord[0] = z; + tileCoord[1] = x; + tileCoord[2] = y; tileCoordTransform(tileCoord, projection, tileCoord); var url = tileUrlFunction(tileCoord, 1, projection); if (goog.isDef(url)) { diff --git a/src/ol/source/tilewmssource.js b/src/ol/source/tilewmssource.js index d7765bd45e..bf7b2d7fee 100644 --- a/src/ol/source/tilewmssource.js +++ b/src/ol/source/tilewmssource.js @@ -18,6 +18,7 @@ goog.require('ol.proj'); goog.require('ol.source.TileImage'); goog.require('ol.source.wms'); goog.require('ol.source.wms.ServerType'); +goog.require('ol.tilecoord'); @@ -150,14 +151,14 @@ ol.source.TileWMS.prototype.getGetFeatureInfoUrl = var tileCoord = tileGrid.getTileCoordForCoordAndResolution( coordinate, resolution); - if (tileGrid.getResolutions().length <= tileCoord.z) { + if (tileGrid.getResolutions().length <= tileCoord[0]) { return undefined; } - var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileResolution = tileGrid.getResolution(tileCoord[0]); var tileExtent = tileGrid.getTileCoordExtent( tileCoord, this.tmpExtent_); - var tileSize = tileGrid.getTileSize(tileCoord.z); + var tileSize = tileGrid.getTileSize(tileCoord[0]); var gutter = this.gutter_; if (gutter !== 0) { @@ -285,7 +286,7 @@ ol.source.TileWMS.prototype.getRequestUrl_ = if (urls.length == 1) { url = urls[0]; } else { - var index = goog.math.modulo(tileCoord.hash(), urls.length); + var index = goog.math.modulo(ol.tilecoord.hash(tileCoord), urls.length); url = urls[index]; } return goog.uri.utils.appendParamsFromMap(url, params); @@ -376,7 +377,7 @@ ol.source.TileWMS.prototype.tileUrlFunction_ = tileGrid = this.getTileGridForProjection(projection); } - if (tileGrid.getResolutions().length <= tileCoord.z) { + if (tileGrid.getResolutions().length <= tileCoord[0]) { return undefined; } @@ -384,10 +385,10 @@ ol.source.TileWMS.prototype.tileUrlFunction_ = pixelRatio = 1; } - var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileResolution = tileGrid.getResolution(tileCoord[0]); var tileExtent = tileGrid.getTileCoordExtent( tileCoord, this.tmpExtent_); - var tileSize = tileGrid.getTileSize(tileCoord.z); + var tileSize = tileGrid.getTileSize(tileCoord[0]); var gutter = this.gutter_; if (gutter !== 0) { diff --git a/src/ol/source/wmtssource.js b/src/ol/source/wmtssource.js index a9ed21da7f..09b83c4e1b 100644 --- a/src/ol/source/wmtssource.js +++ b/src/ol/source/wmtssource.js @@ -109,9 +109,9 @@ ol.source.WMTS = function(options) { return undefined; } else { var localContext = { - 'TileMatrix': tileGrid.getMatrixId(tileCoord.z), - 'TileCol': tileCoord.x, - 'TileRow': tileCoord.y + 'TileMatrix': tileGrid.getMatrixId(tileCoord[0]), + 'TileCol': tileCoord[1], + 'TileRow': tileCoord[2] }; goog.object.extend(localContext, dimensions); var url = template; @@ -138,7 +138,7 @@ ol.source.WMTS = function(options) { } var tmpExtent = ol.extent.createEmpty(); - var tmpTileCoord = new ol.TileCoord(0, 0, 0); + var tmpTileCoord = [0, 0, 0]; tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( /** * @param {ol.TileCoord} tileCoord Tile coordinate. @@ -148,11 +148,11 @@ ol.source.WMTS = function(options) { */ function(tileCoord, projection, opt_tileCoord) { goog.asserts.assert(!goog.isNull(tileGrid)); - if (tileGrid.getResolutions().length <= tileCoord.z) { + if (tileGrid.getResolutions().length <= tileCoord[0]) { return null; } - var x = tileCoord.x; - var y = -tileCoord.y - 1; + var x = tileCoord[1]; + var y = -tileCoord[2] - 1; var tileExtent = tileGrid.getTileCoordExtent(tileCoord); var extent = projection.getExtent(); @@ -161,16 +161,16 @@ ol.source.WMTS = function(options) { ol.extent.getWidth(extent) / ol.extent.getWidth(tileExtent)); x = goog.math.modulo(x, numCols); - tmpTileCoord.z = tileCoord.z; - tmpTileCoord.x = x; - tmpTileCoord.y = tileCoord.y; + tmpTileCoord[0] = tileCoord[0]; + tmpTileCoord[1] = x; + tmpTileCoord[2] = tileCoord[2]; tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent); } if (!ol.extent.intersects(tileExtent, extent) || ol.extent.touches(tileExtent, extent)) { return null; } - return new ol.TileCoord(tileCoord.z, x, y); + return [tileCoord[0], x, y]; }, tileUrlFunction); diff --git a/src/ol/source/zoomifysource.js b/src/ol/source/zoomifysource.js index 4cb20fe158..dec0f4fcc9 100644 --- a/src/ol/source/zoomifysource.js +++ b/src/ol/source/zoomifysource.js @@ -105,12 +105,16 @@ ol.source.Zoomify = function(opt_options) { if (goog.isNull(tileCoord)) { return undefined; } else { - var tileIndex = tileCoord.x + - tileCoord.y * tierSizeInTiles[tileCoord.z][0] + - tileCountUpToTier[tileCoord.z]; + var tileCoordZ = tileCoord[0]; + var tileCoordX = tileCoord[1]; + var tileCoordY = tileCoord[2]; + var tileIndex = + tileCoordX + + tileCoordY * tierSizeInTiles[tileCoordZ][0] + + tileCountUpToTier[tileCoordZ]; var tileGroup = (tileIndex / ol.DEFAULT_TILE_SIZE) | 0; return url + 'TileGroup' + tileGroup + '/' + - tileCoord.z + '-' + tileCoord.x + '-' + tileCoord.y + '.jpg'; + tileCoordZ + '-' + tileCoordX + '-' + tileCoordY + '.jpg'; } }); diff --git a/src/ol/tilecache.js b/src/ol/tilecache.js index 8693f2f2a3..931da1332b 100644 --- a/src/ol/tilecache.js +++ b/src/ol/tilecache.js @@ -2,9 +2,9 @@ goog.provide('ol.TileCache'); goog.require('goog.asserts'); goog.require('ol'); -goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.structs.LRUCache'); +goog.require('ol.tilecoord'); @@ -44,7 +44,7 @@ ol.TileCache.prototype.expireCache = function(usedTiles) { var tile, zKey; while (this.canExpireCache()) { tile = /** @type {ol.Tile} */ (this.peekLast()); - zKey = tile.tileCoord.z.toString(); + zKey = tile.tileCoord[0].toString(); if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { break; } else { @@ -63,7 +63,7 @@ ol.TileCache.prototype.pruneTileRange = function(tileRange) { key; while (i--) { key = this.peekLastKey(); - if (tileRange.contains(ol.TileCoord.createFromString(key))) { + if (tileRange.contains(ol.tilecoord.createFromString(key))) { this.pop().dispose(); } else { this.get(key); diff --git a/src/ol/tilecoord.js b/src/ol/tilecoord.js index a521630542..4464b7e4e4 100644 --- a/src/ol/tilecoord.js +++ b/src/ol/tilecoord.js @@ -1,9 +1,19 @@ goog.provide('ol.TileCoord'); +goog.provide('ol.tilecoord'); goog.require('goog.array'); goog.require('goog.asserts'); +/** + * An array of three numbers representing the location of a tile in a tile + * grid. The order is `z`, `x`, and `y`. `z` is the zoom level. + * @typedef {Array.} ol.TileCoord + * @api + */ +ol.TileCoord; + + /** * @enum {number} */ @@ -15,43 +25,11 @@ ol.QuadKeyCharCode = { }; - -/** - * @classdesc - * Represents the location of a tile in a tile grid. - * - * @constructor - * @param {number} z Zoom level. - * @param {number} x X. - * @param {number} y Y. - * @struct - */ -ol.TileCoord = function(z, x, y) { - - /** - * Zoom level. - * @type {number} - */ - this.z = z; - - /** - * @type {number} - */ - this.x = x; - - /** - * @type {number} - */ - this.y = y; - -}; - - /** * @param {string} quadKey Quad key. * @return {ol.TileCoord} Tile coordinate. */ -ol.TileCoord.createFromQuadKey = function(quadKey) { +ol.tilecoord.createFromQuadKey = function(quadKey) { var z = quadKey.length, x = 0, y = 0; var mask = 1 << (z - 1); var i; @@ -70,7 +48,7 @@ ol.TileCoord.createFromQuadKey = function(quadKey) { } mask >>= 1; } - return new ol.TileCoord(z, x, y); + return [z, x, y]; }; @@ -79,12 +57,13 @@ ol.TileCoord.createFromQuadKey = function(quadKey) { * numbers. * @return {ol.TileCoord} Tile coord. */ -ol.TileCoord.createFromString = function(str) { +ol.tilecoord.createFromString = function(str) { var v = str.split('/'); + goog.asserts.assert(v.length === 3); v = goog.array.map(v, function(e, i, a) { return parseInt(e, 10); }); - return new ol.TileCoord(v[0], v[1], v[2]); + return v; }; @@ -95,14 +74,14 @@ ol.TileCoord.createFromString = function(str) { * @param {ol.TileCoord|undefined} tileCoord Tile coordinate. * @return {ol.TileCoord} Tile coordinate. */ -ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) { +ol.tilecoord.createOrUpdate = function(z, x, y, tileCoord) { if (goog.isDef(tileCoord)) { - tileCoord.z = z; - tileCoord.x = x; - tileCoord.y = y; + tileCoord[0] = z; + tileCoord[1] = x; + tileCoord[2] = y; return tileCoord; } else { - return new ol.TileCoord(z, x, y); + return [z, x, y]; } }; @@ -113,50 +92,35 @@ ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) { * @param {number} y Y. * @return {string} Key. */ -ol.TileCoord.getKeyZXY = function(z, x, y) { +ol.tilecoord.getKeyZXY = function(z, x, y) { return z + '/' + x + '/' + y; }; /** - * @param {Array.=} opt_result Optional array to reuse. - * @return {Array.} Array of z, x, y. - * @api - */ -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]; - } -}; - - -/** + * @param {ol.TileCoord} tileCoord Tile coord. * @return {number} Hash. */ -ol.TileCoord.prototype.hash = function() { - return (this.x << this.z) + this.y; +ol.tilecoord.hash = function(tileCoord) { + return (tileCoord[1] << tileCoord[0]) + tileCoord[2]; }; /** + * @param {ol.TileCoord} tileCoord Tile coord. * @return {string} Quad key. */ -ol.TileCoord.prototype.quadKey = function() { - var digits = new Array(this.z); - var mask = 1 << (this.z - 1); +ol.tilecoord.quadKey = function(tileCoord) { + var z = tileCoord[0]; + var digits = new Array(z); + var mask = 1 << (z - 1); var i, charCode; - for (i = 0; i < this.z; ++i) { + for (i = 0; i < z; ++i) { charCode = ol.QuadKeyCharCode.ZERO; - if (this.x & mask) { + if (tileCoord[1] & mask) { charCode += 1; } - if (this.y & mask) { + if (tileCoord[2] & mask) { charCode += 2; } digits[i] = String.fromCharCode(charCode); @@ -167,8 +131,9 @@ ol.TileCoord.prototype.quadKey = function() { /** + * @param {ol.TileCoord} tileCoord Tile coord. * @return {string} String. */ -ol.TileCoord.prototype.toString = function() { - return ol.TileCoord.getKeyZXY(this.z, this.x, this.y); +ol.tilecoord.toString = function(tileCoord) { + return ol.tilecoord.getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]); }; diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index ea4f09737f..8c553e8f17 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -11,6 +11,7 @@ goog.require('ol.extent'); goog.require('ol.proj.METERS_PER_UNIT'); goog.require('ol.proj.Projection'); goog.require('ol.proj.Units'); +goog.require('ol.tilecoord'); @@ -94,7 +95,7 @@ ol.tilegrid.TileGrid = function(options) { * @private * @type {ol.TileCoord} */ -ol.tilegrid.TileGrid.tmpTileCoord_ = new ol.TileCoord(0, 0, 0); +ol.tilegrid.TileGrid.tmpTileCoord_ = [0, 0, 0]; /** @@ -118,7 +119,7 @@ ol.tilegrid.TileGrid.prototype.createTileCoordTransform = goog.abstractMethod; ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) { var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); - var z = tileCoord.z - 1; + var z = tileCoord[0] - 1; while (z >= this.minZoom) { if (callback.call(opt_this, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) { @@ -191,10 +192,10 @@ ol.tilegrid.TileGrid.prototype.getResolutions = function() { */ ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) { - if (tileCoord.z < this.maxZoom) { + if (tileCoord[0] < this.maxZoom) { var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); return this.getTileRangeForExtentAndZ( - tileCoordExtent, tileCoord.z + 1, opt_tileRange); + tileCoordExtent, tileCoord[0] + 1, opt_tileRange); } else { return null; } @@ -231,12 +232,12 @@ ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_; this.getTileCoordForXYAndResolution_( extent[0], extent[1], resolution, false, tileCoord); - var minX = tileCoord.x; - var minY = tileCoord.y; + var minX = tileCoord[1]; + var minY = tileCoord[2]; this.getTileCoordForXYAndResolution_( extent[2], extent[3], resolution, true, tileCoord); return ol.TileRange.createOrUpdate( - minX, tileCoord.x, minY, tileCoord.y, opt_tileRange); + minX, tileCoord[1], minY, tileCoord[2], opt_tileRange); }; @@ -259,12 +260,12 @@ ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = * @return {ol.Coordinate} Tile center. */ ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) { - var origin = this.getOrigin(tileCoord.z); - var resolution = this.getResolution(tileCoord.z); - var tileSize = this.getTileSize(tileCoord.z); + var origin = this.getOrigin(tileCoord[0]); + var resolution = this.getResolution(tileCoord[0]); + var tileSize = this.getTileSize(tileCoord[0]); return [ - origin[0] + (tileCoord.x + 0.5) * tileSize * resolution, - origin[1] + (tileCoord.y + 0.5) * tileSize * resolution + origin[0] + (tileCoord[1] + 0.5) * tileSize * resolution, + origin[1] + (tileCoord[2] + 0.5) * tileSize * resolution ]; }; @@ -276,11 +277,11 @@ ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) { */ ol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) { - var origin = this.getOrigin(tileCoord.z); - var resolution = this.getResolution(tileCoord.z); - var tileSize = this.getTileSize(tileCoord.z); - var minX = origin[0] + tileCoord.x * tileSize * resolution; - var minY = origin[1] + tileCoord.y * tileSize * resolution; + var origin = this.getOrigin(tileCoord[0]); + var resolution = this.getResolution(tileCoord[0]); + var tileSize = this.getTileSize(tileCoord[0]); + var minX = origin[0] + tileCoord[1] * tileSize * resolution; + var minY = origin[1] + tileCoord[2] * tileSize * resolution; var maxX = minX + tileSize * resolution; var maxY = minY + tileSize * resolution; return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent); @@ -333,7 +334,7 @@ ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function( tileCoordY = Math.floor(tileCoordY); } - return ol.TileCoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord); + return ol.tilecoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord); }; @@ -357,8 +358,8 @@ ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = */ ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) { goog.asserts.assert( - this.minZoom <= tileCoord.z && tileCoord.z <= this.maxZoom); - return this.resolutions_[tileCoord.z]; + this.minZoom <= tileCoord[0] && tileCoord[0] <= this.maxZoom); + return this.resolutions_[tileCoord[0]]; }; diff --git a/src/ol/tilegrid/xyztilegrid.js b/src/ol/tilegrid/xyztilegrid.js index 322025bb19..61ef4165d7 100644 --- a/src/ol/tilegrid/xyztilegrid.js +++ b/src/ol/tilegrid/xyztilegrid.js @@ -6,6 +6,7 @@ goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.proj'); goog.require('ol.proj.EPSG3857'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); @@ -69,18 +70,18 @@ ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { * @return {ol.TileCoord} Tile coordinate. */ function(tileCoord, projection, opt_tileCoord) { - var z = tileCoord.z; + var z = tileCoord[0]; if (z < minZ || maxZ < z) { return null; } var n = Math.pow(2, z); - var x = tileCoord.x; + var x = tileCoord[1]; if (wrapX) { x = goog.math.modulo(x, n); } else if (x < 0 || n <= x) { return null; } - var y = tileCoord.y; + var y = tileCoord[2]; if (y < -n || -1 < y) { return null; } @@ -89,7 +90,7 @@ ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { return null; } } - return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); + return ol.tilecoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); }); }; @@ -99,10 +100,10 @@ ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { */ ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange) { - if (tileCoord.z < this.maxZoom) { + if (tileCoord[0] < this.maxZoom) { return ol.TileRange.createOrUpdate( - 2 * tileCoord.x, 2 * (tileCoord.x + 1), - 2 * tileCoord.y, 2 * (tileCoord.y + 1), + 2 * tileCoord[1], 2 * (tileCoord[1] + 1), + 2 * tileCoord[2], 2 * (tileCoord[2] + 1), opt_tileRange); } else { return null; @@ -116,9 +117,9 @@ ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange) { var tileRange = ol.TileRange.createOrUpdate( - 0, tileCoord.x, 0, tileCoord.y, opt_tileRange); + 0, tileCoord[1], 0, tileCoord[2], opt_tileRange); var z; - for (z = tileCoord.z - 1; z >= this.minZoom; --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)) { diff --git a/src/ol/tilegrid/zoomifytilegrid.js b/src/ol/tilegrid/zoomifytilegrid.js index f34aa82bf8..379e23c03e 100644 --- a/src/ol/tilegrid/zoomifytilegrid.js +++ b/src/ol/tilegrid/zoomifytilegrid.js @@ -3,6 +3,7 @@ goog.provide('ol.tilegrid.Zoomify'); goog.require('goog.math'); goog.require('ol.TileCoord'); goog.require('ol.proj'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); @@ -55,16 +56,16 @@ ol.tilegrid.Zoomify.prototype.createTileCoordTransform = function(opt_options) { * @return {ol.TileCoord} Tile coordinate. */ function(tileCoord, projection, opt_tileCoord) { - var z = tileCoord.z; + var z = tileCoord[0]; if (z < minZ || maxZ < z) { return null; } var n = Math.pow(2, z); - var x = tileCoord.x; + var x = tileCoord[1]; if (x < 0 || n <= x) { return null; } - var y = tileCoord.y; + var y = tileCoord[2]; if (y < -n || -1 < y) { return null; } @@ -73,6 +74,6 @@ ol.tilegrid.Zoomify.prototype.createTileCoordTransform = function(opt_options) { return null; } } - return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); + return ol.tilecoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); }); }; diff --git a/src/ol/tilerange.js b/src/ol/tilerange.js index f01a4fe963..2a2b51b61d 100644 --- a/src/ol/tilerange.js +++ b/src/ol/tilerange.js @@ -48,16 +48,22 @@ ol.TileRange = function(minX, maxX, minY, maxY) { */ ol.TileRange.boundingTileRange = function(var_args) { var tileCoord0 = /** @type {ol.TileCoord} */ (arguments[0]); - var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, - tileCoord0.y, tileCoord0.y); - var i, ii, tileCoord; + var tileCoord0Z = tileCoord0[0]; + var tileCoord0X = tileCoord0[1]; + var tileCoord0Y = tileCoord0[2]; + var tileRange = new ol.TileRange(tileCoord0X, tileCoord0X, + tileCoord0Y, tileCoord0Y); + var i, ii, tileCoord, tileCoordX, tileCoordY, tileCoordZ; for (i = 1, ii = arguments.length; i < ii; ++i) { tileCoord = /** @type {ol.TileCoord} */ (arguments[i]); - goog.asserts.assert(tileCoord.z == tileCoord0.z); - tileRange.minX = Math.min(tileRange.minX, tileCoord.x); - tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x); - tileRange.minY = Math.min(tileRange.minY, tileCoord.y); - tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y); + tileCoordZ = tileCoord[0]; + tileCoordX = tileCoord[1]; + tileCoordY = tileCoord[2]; + goog.asserts.assert(tileCoordZ == tileCoord0Z); + tileRange.minX = Math.min(tileRange.minX, tileCoordX); + tileRange.maxX = Math.max(tileRange.maxX, tileCoordX); + tileRange.minY = Math.min(tileRange.minY, tileCoordY); + tileRange.maxY = Math.max(tileRange.maxY, tileCoordY); } return tileRange; }; @@ -89,7 +95,7 @@ ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) { * @return {boolean} Contains tile coordinate. */ ol.TileRange.prototype.contains = function(tileCoord) { - return this.containsXY(tileCoord.x, tileCoord.y); + return this.containsXY(tileCoord[1], tileCoord[2]); }; diff --git a/src/ol/tileurlfunction.js b/src/ol/tileurlfunction.js index 5b5f0349d9..00b4e822b4 100644 --- a/src/ol/tileurlfunction.js +++ b/src/ol/tileurlfunction.js @@ -4,6 +4,7 @@ goog.provide('ol.TileUrlFunctionType'); goog.require('goog.array'); goog.require('goog.math'); goog.require('ol.TileCoord'); +goog.require('ol.tilecoord'); /** @@ -46,11 +47,11 @@ ol.TileUrlFunction.createFromTemplate = function(template) { if (goog.isNull(tileCoord)) { return undefined; } else { - return template.replace(zRegEx, tileCoord.z.toString()) - .replace(xRegEx, tileCoord.x.toString()) - .replace(yRegEx, tileCoord.y.toString()) + return template.replace(zRegEx, tileCoord[0].toString()) + .replace(xRegEx, tileCoord[1].toString()) + .replace(yRegEx, tileCoord[2].toString()) .replace(dashYRegEx, function() { - var y = (1 << tileCoord.z) - tileCoord.y - 1; + var y = (1 << tileCoord[0]) - tileCoord[2] - 1; return y.toString(); }); } @@ -87,8 +88,8 @@ ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { if (goog.isNull(tileCoord)) { return undefined; } else { - var index = - goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length); + var h = ol.tilecoord.hash(tileCoord); + var index = goog.math.modulo(h, tileUrlFunctions.length); return tileUrlFunctions[index](tileCoord, pixelRatio, projection); } }); @@ -114,7 +115,7 @@ ol.TileUrlFunction.nullTileUrlFunction = */ ol.TileUrlFunction.withTileCoordTransform = function(transformFn, tileUrlFunction) { - var tmpTileCoord = new ol.TileCoord(0, 0, 0); + var tmpTileCoord = [0, 0, 0]; return ( /** * @param {ol.TileCoord} tileCoord Tile Coordinate. diff --git a/test/spec/ol/source/tilesource.test.js b/test/spec/ol/source/tilesource.test.js index f893e8d61e..d2340c0a44 100644 --- a/test/spec/ol/source/tilesource.test.js +++ b/test/spec/ol/source/tilesource.test.js @@ -224,9 +224,9 @@ goog.inherits(ol.test.source.TileMock, ol.source.Tile); * @inheritDoc */ ol.test.source.TileMock.prototype.getTile = function(z, x, y) { - var key = ol.TileCoord.getKeyZXY(z, x, y); + var key = ol.tilecoord.getKeyZXY(z, x, y); var tileState = this.loaded_[key] ? ol.TileState.LOADED : ol.TileState.IDLE; - return new ol.Tile(new ol.TileCoord(z, x, y), tileState); + return new ol.Tile([z, x, y], tileState); }; @@ -270,9 +270,9 @@ describe('ol.test.source.TileMock', function() { goog.require('goog.object'); goog.require('ol.Tile'); -goog.require('ol.TileCoord'); goog.require('ol.TileState'); goog.require('ol.proj'); goog.require('ol.source.Source'); goog.require('ol.source.Tile'); +goog.require('ol.tilecoord'); goog.require('ol.tilegrid.TileGrid'); diff --git a/test/spec/ol/source/tilewmssource.test.js b/test/spec/ol/source/tilewmssource.test.js index d62dee4f46..d883f3694b 100644 --- a/test/spec/ol/source/tilewmssource.test.js +++ b/test/spec/ol/source/tilewmssource.test.js @@ -109,7 +109,7 @@ describe('ol.source.TileWMS', function() { it('returns a tile if it is contained within layers extent', function() { options.extent = [-80, -40, -50, -10]; var source = new ol.source.TileWMS(options); - var tileCoord = new ol.TileCoord(3, 2, 1); + var tileCoord = [3, 2, 1]; var url = source.tileUrlFunction(tileCoord, 1, ol.proj.get('EPSG:4326')); var uri = new goog.Uri(url); var queryData = uri.getQueryData(); @@ -119,7 +119,7 @@ describe('ol.source.TileWMS', function() { it('returns a tile if it intersects layers extent', function() { options.extent = [-80, -40, -40, -10]; var source = new ol.source.TileWMS(options); - var tileCoord = new ol.TileCoord(3, 3, 1); + var tileCoord = [3, 3, 1]; var url = source.tileUrlFunction(tileCoord, 1, ol.proj.get('EPSG:4326')); var uri = new goog.Uri(url); var queryData = uri.getQueryData(); @@ -201,5 +201,4 @@ describe('ol.source.TileWMS', function() { goog.require('goog.Uri'); goog.require('ol.ImageTile'); goog.require('ol.source.TileWMS'); -goog.require('ol.TileCoord'); goog.require('ol.proj'); diff --git a/test/spec/ol/source/xyzsource.test.js b/test/spec/ol/source/xyzsource.test.js index 6aae01e06d..b72cc7c475 100644 --- a/test/spec/ol/source/xyzsource.test.js +++ b/test/spec/ol/source/xyzsource.test.js @@ -54,13 +54,13 @@ describe('ol.source.XYZ', function() { it('returns the expected URL', function() { var tileUrl = xyzTileSource.tileUrlFunction( - new ol.TileCoord(6, -31, -23)); + [6, -31, -23]); expect(tileUrl).to.eql('6/33/22'); - tileUrl = xyzTileSource.tileUrlFunction(new ol.TileCoord(6, 33, -23)); + tileUrl = xyzTileSource.tileUrlFunction([6, 33, -23]); expect(tileUrl).to.eql('6/33/22'); - tileUrl = xyzTileSource.tileUrlFunction(new ol.TileCoord(6, 97, -23)); + tileUrl = xyzTileSource.tileUrlFunction([6, 97, -23]); expect(tileUrl).to.eql('6/33/22'); }); @@ -70,13 +70,13 @@ describe('ol.source.XYZ', function() { it('returns the expected URL', function() { var tileUrl = xyzTileSource.tileUrlFunction( - new ol.TileCoord(6, 33, -87)); + [6, 33, -87]); expect(tileUrl).to.be(undefined); - tileUrl = xyzTileSource.tileUrlFunction(new ol.TileCoord(6, 33, -23)); + tileUrl = xyzTileSource.tileUrlFunction([6, 33, -23]); expect(tileUrl).to.eql('6/33/22'); - tileUrl = xyzTileSource.tileUrlFunction(new ol.TileCoord(6, 33, 41)); + tileUrl = xyzTileSource.tileUrlFunction([6, 33, 41]); expect(tileUrl).to.be(undefined); }); diff --git a/test/spec/ol/tilecoord.test.js b/test/spec/ol/tilecoord.test.js index 3a0f0c6350..d46c3483c8 100644 --- a/test/spec/ol/tilecoord.test.js +++ b/test/spec/ol/tilecoord.test.js @@ -4,47 +4,49 @@ describe('ol.TileCoord', function() { describe('create', function() { it('sets x y z properties as expected', function() { - var tc = new ol.TileCoord(1, 2, 3); - expect(tc.z).to.eql(1); - expect(tc.x).to.eql(2); - expect(tc.y).to.eql(3); + var tileCoord = [1, 2, 3]; + expect(tileCoord[0]).to.eql(1); + expect(tileCoord[1]).to.eql(2); + expect(tileCoord[2]).to.eql(3); }); }); describe('create from quad key', function() { it('sets x y z properties as expected', function() { - var tc = ol.TileCoord.createFromQuadKey('213'); - expect(tc.z).to.eql(3); - expect(tc.x).to.eql(3); - expect(tc.y).to.eql(5); + var tileCoord = ol.tilecoord.createFromQuadKey('213'); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(3); + expect(tileCoord[2]).to.eql(5); }); }); describe('create from string', function() { it('sets x y z properties as expected', function() { var str = '1/2/3'; - var tc = ol.TileCoord.createFromString(str); - expect(tc.z).to.eql(1); - expect(tc.x).to.eql(2); - expect(tc.y).to.eql(3); + var tileCoord = ol.tilecoord.createFromString(str); + expect(tileCoord[0]).to.eql(1); + expect(tileCoord[1]).to.eql(2); + expect(tileCoord[2]).to.eql(3); }); }); describe('call quadKey', function() { it('returns expected string', function() { - var tc = new ol.TileCoord(3, 3, 5); - var s = tc.quadKey(); + var tileCoord = [3, 3, 5]; + var s = ol.tilecoord.quadKey(tileCoord); expect(s).to.eql('213'); }); }); describe('hash', function() { it('produces different hashes for different tile coords', function() { - var tc1 = new ol.TileCoord(3, 2, 1); - var tc2 = new ol.TileCoord(3, 1, 1); - expect(tc1.hash()).not.to.eql(tc2.hash()); + var tileCoord1 = [3, 2, 1]; + var tileCoord2 = [3, 1, 1]; + expect(ol.tilecoord.hash(tileCoord1)).not.to.eql( + ol.tilecoord.hash(tileCoord2)); }); }); }); goog.require('ol.TileCoord'); +goog.require('ol.tilecoord'); diff --git a/test/spec/ol/tilegrid/tilegrid.test.js b/test/spec/ol/tilegrid/tilegrid.test.js index f4b5272870..08e1063a4b 100644 --- a/test/spec/ol/tilegrid/tilegrid.test.js +++ b/test/spec/ol/tilegrid/tilegrid.test.js @@ -238,24 +238,24 @@ describe('ol.tilegrid.TileGrid', function() { var tileCoord; tileCoord = tileGrid.getTileCoordForCoordAndZ([0, 0], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(0); tileCoord = tileGrid.getTileCoordForCoordAndZ([0, 100000], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(10); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(10); tileCoord = tileGrid.getTileCoordForCoordAndZ([100000, 0], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(10); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(10); + expect(tileCoord[2]).to.eql(0); tileCoord = tileGrid.getTileCoordForCoordAndZ([100000, 100000], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(10); - expect(tileCoord.y).to.eql(10); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(10); + expect(tileCoord[2]).to.eql(10); }); }); @@ -271,24 +271,24 @@ describe('ol.tilegrid.TileGrid', function() { var tileCoord; tileCoord = tileGrid.getTileCoordForCoordAndZ([0, 0], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(-10); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(-10); tileCoord = tileGrid.getTileCoordForCoordAndZ([0, 100000], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(0); tileCoord = tileGrid.getTileCoordForCoordAndZ([100000, 0], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(10); - expect(tileCoord.y).to.eql(-10); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(10); + expect(tileCoord[2]).to.eql(-10); tileCoord = tileGrid.getTileCoordForCoordAndZ([100000, 100000], 3); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(10); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(10); + expect(tileCoord[2]).to.eql(0); }); }); }); @@ -309,65 +309,65 @@ describe('ol.tilegrid.TileGrid', function() { // gets the first tile at the origin coordinate = [0, 0]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(0); // gets one tile northwest of the origin coordinate = [-1280, 1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(-1); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(-1); + expect(tileCoord[2]).to.eql(0); // gets one tile northeast of the origin coordinate = [1280, 1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(0); // gets one tile southeast of the origin coordinate = [1280, -1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(-1); // gets one tile southwest of the origin coordinate = [-1280, -1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(-1); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(-1); + expect(tileCoord[2]).to.eql(-1); // gets the tile to the east when on the edge coordinate = [2560, -1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(1); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(1); + expect(tileCoord[2]).to.eql(-1); // gets the tile to the north when on the edge coordinate = [1280, -2560]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(-1); // pixels are top aligned to the origin coordinate = [1280, -2559.999]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(-1); // pixels are left aligned to the origin coordinate = [2559.999, -1280]; tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, 10); - expect(tileCoord.z).to.eql(0); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(0); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(-1); }); }); @@ -386,16 +386,16 @@ describe('ol.tilegrid.TileGrid', function() { // gets higher tile for edge intersection tileCoord = tileGrid.getTileCoordForXYAndResolution_( 0, 0, 100, false); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(0); - expect(tileCoord.y).to.eql(0); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(0); + expect(tileCoord[2]).to.eql(0); // gets higher tile for edge intersection tileCoord = tileGrid.getTileCoordForXYAndResolution_( 100000, 100000, 100, false); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(10); - expect(tileCoord.y).to.eql(10); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(10); + expect(tileCoord[2]).to.eql(10); }); @@ -412,16 +412,16 @@ describe('ol.tilegrid.TileGrid', function() { // can get lower tile for edge intersection tileCoord = tileGrid.getTileCoordForXYAndResolution_( 0, 0, 100, true); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(-1); - expect(tileCoord.y).to.eql(-1); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(-1); + expect(tileCoord[2]).to.eql(-1); // gets higher tile for edge intersection tileCoord = tileGrid.getTileCoordForXYAndResolution_( 100000, 100000, 100, true); - expect(tileCoord.z).to.eql(3); - expect(tileCoord.x).to.eql(9); - expect(tileCoord.y).to.eql(9); + expect(tileCoord[0]).to.eql(3); + expect(tileCoord[1]).to.eql(9); + expect(tileCoord[2]).to.eql(9); }); @@ -437,15 +437,15 @@ describe('ol.tilegrid.TileGrid', function() { }); var center; - center = tileGrid.getTileCoordCenter(new ol.TileCoord(0, 0, 0)); + center = tileGrid.getTileCoordCenter([0, 0, 0]); expect(center[0]).to.eql(50000); expect(center[1]).to.eql(50000); - center = tileGrid.getTileCoordCenter(new ol.TileCoord(3, 0, 0)); + center = tileGrid.getTileCoordCenter([3, 0, 0]); expect(center[0]).to.eql(5000); expect(center[1]).to.eql(5000); - center = tileGrid.getTileCoordCenter(new ol.TileCoord(3, 9, 9)); + center = tileGrid.getTileCoordCenter([3, 9, 9]); expect(center[0]).to.eql(95000); expect(center[1]).to.eql(95000); }); @@ -461,19 +461,19 @@ describe('ol.tilegrid.TileGrid', function() { }); var tileCoordExtent; - tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(0, 0, 0)); + tileCoordExtent = tileGrid.getTileCoordExtent([0, 0, 0]); expect(tileCoordExtent[0]).to.eql(0); expect(tileCoordExtent[1]).to.eql(0); expect(tileCoordExtent[2]).to.eql(100000); expect(tileCoordExtent[3]).to.eql(100000); - tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(3, 9, 0)); + tileCoordExtent = tileGrid.getTileCoordExtent([3, 9, 0]); expect(tileCoordExtent[0]).to.eql(90000); expect(tileCoordExtent[1]).to.eql(0); expect(tileCoordExtent[2]).to.eql(100000); expect(tileCoordExtent[3]).to.eql(10000); - tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(3, 0, 9)); + tileCoordExtent = tileGrid.getTileCoordExtent([3, 0, 9]); expect(tileCoordExtent[0]).to.eql(0); expect(tileCoordExtent[1]).to.eql(90000); expect(tileCoordExtent[2]).to.eql(10000); @@ -569,7 +569,7 @@ describe('ol.tilegrid.TileGrid', function() { var zs = [], tileRanges = []; tileGrid.forEachTileCoordParentTileRange( - new ol.TileCoord(3, 7, 3), + [3, 7, 3], function(z, tileRange) { zs.push(z); tileRanges.push(tileRange); @@ -643,7 +643,6 @@ describe('ol.tilegrid.TileGrid', function() { }); goog.require('ol.Coordinate'); -goog.require('ol.TileCoord'); goog.require('ol.proj'); goog.require('ol.proj.METERS_PER_UNIT'); goog.require('ol.proj.Projection'); diff --git a/test/spec/ol/tilegrid/xyztilegrid.test.js b/test/spec/ol/tilegrid/xyztilegrid.test.js index c4071f7cd8..042312c120 100644 --- a/test/spec/ol/tilegrid/xyztilegrid.test.js +++ b/test/spec/ol/tilegrid/xyztilegrid.test.js @@ -14,7 +14,7 @@ describe('ol.tilegrid.XYZ', function() { it('iterates as expected', function() { - var tileCoord = new ol.TileCoord(5, 11, 21); + var tileCoord = [5, 11, 21]; var zs = [], tileRanges = []; xyzTileGrid.forEachTileCoordParentTileRange( tileCoord, diff --git a/test/spec/ol/tilerange.test.js b/test/spec/ol/tilerange.test.js index 2f58fbe96c..7fa685874c 100644 --- a/test/spec/ol/tilerange.test.js +++ b/test/spec/ol/tilerange.test.js @@ -19,39 +19,38 @@ describe('ol.TileRange', function() { describe('contains', function() { it('returns the expected value', function() { var tileRange = new ol.TileRange(1, 3, 1, 3); - expect(tileRange.contains(new ol.TileCoord(0, 0, 0))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 0, 1))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 0, 2))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 0, 3))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 0, 4))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 1, 0))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 1, 1))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 1, 2))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 1, 3))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 1, 4))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 2, 0))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 2, 1))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 2, 2))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 2, 3))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 2, 4))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 3, 0))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 3, 1))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 3, 2))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 3, 3))).to.be.ok(); - expect(tileRange.contains(new ol.TileCoord(0, 3, 4))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 4, 0))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 4, 1))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 4, 2))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 4, 3))).to.not.be(); - expect(tileRange.contains(new ol.TileCoord(0, 4, 4))).to.not.be(); + expect(tileRange.contains([0, 0, 0])).to.not.be(); + expect(tileRange.contains([0, 0, 1])).to.not.be(); + expect(tileRange.contains([0, 0, 2])).to.not.be(); + expect(tileRange.contains([0, 0, 3])).to.not.be(); + expect(tileRange.contains([0, 0, 4])).to.not.be(); + expect(tileRange.contains([0, 1, 0])).to.not.be(); + expect(tileRange.contains([0, 1, 1])).to.be.ok(); + expect(tileRange.contains([0, 1, 2])).to.be.ok(); + expect(tileRange.contains([0, 1, 3])).to.be.ok(); + expect(tileRange.contains([0, 1, 4])).to.not.be(); + expect(tileRange.contains([0, 2, 0])).to.not.be(); + expect(tileRange.contains([0, 2, 1])).to.be.ok(); + expect(tileRange.contains([0, 2, 2])).to.be.ok(); + expect(tileRange.contains([0, 2, 3])).to.be.ok(); + expect(tileRange.contains([0, 2, 4])).to.not.be(); + expect(tileRange.contains([0, 3, 0])).to.not.be(); + expect(tileRange.contains([0, 3, 1])).to.be.ok(); + expect(tileRange.contains([0, 3, 2])).to.be.ok(); + expect(tileRange.contains([0, 3, 3])).to.be.ok(); + expect(tileRange.contains([0, 3, 4])).to.not.be(); + expect(tileRange.contains([0, 4, 0])).to.not.be(); + expect(tileRange.contains([0, 4, 1])).to.not.be(); + expect(tileRange.contains([0, 4, 2])).to.not.be(); + expect(tileRange.contains([0, 4, 3])).to.not.be(); + expect(tileRange.contains([0, 4, 4])).to.not.be(); }); }); describe('boundingTileRange', function() { it('returns the expected TileRange', function() { var tileRange = new ol.TileRange.boundingTileRange( - new ol.TileCoord(3, 1, 3), - new ol.TileCoord(3, 2, 0)); + [3, 1, 3], [3, 2, 0]); expect(tileRange.minX).to.eql(1); expect(tileRange.maxX).to.eql(2); expect(tileRange.minY).to.eql(0); @@ -61,8 +60,7 @@ describe('ol.TileRange', function() { describe('with mixed z', function() { expect(function() { var tileRange = new ol.TileRange.boundingTileRange( - new ol.TileCoord(3, 1, 3), - new ol.TileCoord(4, 2, 0)); + [3, 1, 3], [4, 2, 0]); tileRange = tileRange; // suppress gjslint warning about unused variable }).to.throwException(); }); diff --git a/test/spec/ol/tileurlfunction.test.js b/test/spec/ol/tileurlfunction.test.js index c225c97a26..60ddd2b1cb 100644 --- a/test/spec/ol/tileurlfunction.test.js +++ b/test/spec/ol/tileurlfunction.test.js @@ -30,16 +30,16 @@ describe('ol.TileUrlFunction', function() { describe('createFromTemplate', function() { it('creates expected URL', function() { var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{x}/{y}'); - expect(tileUrl(new ol.TileCoord(3, 2, 1))).to.eql('3/2/1'); + expect(tileUrl([3, 2, 1])).to.eql('3/2/1'); expect(tileUrl(null)).to.be(undefined); }); it('accepts {-y} placeholder', function() { var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{x}/{-y}'); - expect(tileUrl(new ol.TileCoord(3, 2, 2))).to.eql('3/2/5'); + expect(tileUrl([3, 2, 2])).to.eql('3/2/5'); }); it('replaces multiple placeholder occurrences', function() { var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{z}{x}{y}'); - expect(tileUrl(new ol.TileCoord(3, 2, 1))).to.eql('3/321'); + expect(tileUrl([3, 2, 1])).to.eql('3/321'); }); }); @@ -51,13 +51,19 @@ describe('ol.TileUrlFunction', function() { 'http://tile-3/{z}/{x}/{y}' ]; var tileUrlFunction = ol.TileUrlFunction.createFromTemplates(templates); - var tileCoord = new ol.TileCoord(3, 2, 1); - tileCoord.hash = function() { return 3; }; + var tileCoord = [3, 2, 1]; + + sinon.stub(ol.tilecoord, 'hash', function() { return 3; }); expect(tileUrlFunction(tileCoord)).to.eql('http://tile-1/3/2/1'); - tileCoord.hash = function() { return 2; }; + ol.tilecoord.hash.restore(); + + sinon.stub(ol.tilecoord, 'hash', function() { return 2; }); expect(tileUrlFunction(tileCoord)).to.eql('http://tile-3/3/2/1'); - tileCoord.hash = function() { return 1; }; + ol.tilecoord.hash.restore(); + + sinon.stub(ol.tilecoord, 'hash', function() { return 1; }); expect(tileUrlFunction(tileCoord)).to.eql('http://tile-2/3/2/1'); + ol.tilecoord.hash.restore(); }); }); @@ -65,10 +71,10 @@ describe('ol.TileUrlFunction', function() { it('creates expected URL', function() { var tileUrl = ol.TileUrlFunction.withTileCoordTransform( function(tileCoord) { - return new ol.TileCoord(tileCoord.z, tileCoord.x, -tileCoord.y); + return [tileCoord[0], tileCoord[1], -tileCoord[2]]; }, ol.TileUrlFunction.createFromTemplate('{z}/{x}/{y}')); - expect(tileUrl(new ol.TileCoord(3, 2, -1))).to.eql('3/2/1'); + expect(tileUrl([3, 2, -1])).to.eql('3/2/1'); expect(tileUrl(null)).to.be(undefined); }); }); @@ -79,8 +85,8 @@ describe('ol.TileUrlFunction', function() { ol.TileUrlFunction.createFromTemplate('a'), ol.TileUrlFunction.createFromTemplate('b') ]); - var tileUrl1 = tileUrl(new ol.TileCoord(1, 0, 0)); - var tileUrl2 = tileUrl(new ol.TileCoord(1, 0, 1)); + var tileUrl1 = tileUrl([1, 0, 0]); + var tileUrl2 = tileUrl([1, 0, 1]); expect(tileUrl1).not.to.be(tileUrl2); expect(tileUrl(null)).to.be(undefined); });