File: /var/dev/nowruzgan/travelogue/node_modules/ol/tilecoord.js
/**
* @module ol/tilecoord
*/
/**
* An array of three numbers representing the location of a tile in a tile
* grid. The order is `z` (zoom level), `x` (column), and `y` (row).
* @typedef {Array<number>} TileCoord
* @api
*/
/**
* @param {number} z Z.
* @param {number} x X.
* @param {number} y Y.
* @param {TileCoord} [tileCoord] Tile coordinate.
* @return {TileCoord} Tile coordinate.
*/
export function createOrUpdate(z, x, y, tileCoord) {
if (tileCoord !== undefined) {
tileCoord[0] = z;
tileCoord[1] = x;
tileCoord[2] = y;
return tileCoord;
}
return [z, x, y];
}
/**
* @param {number} z Z.
* @param {number} x X.
* @param {number} y Y.
* @return {string} Key.
*/
export function getKeyZXY(z, x, y) {
return z + '/' + x + '/' + y;
}
/**
* Get the key for a tile coord.
* @param {TileCoord} tileCoord The tile coord.
* @return {string} Key.
*/
export function getKey(tileCoord) {
return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);
}
/**
* Get the tile cache key for a tile key obtained through `tile.getKey()`.
* @param {string} tileKey The tile key.
* @return {string} The cache key.
*/
export function getCacheKeyForTileKey(tileKey) {
const [z, x, y] = tileKey
.substring(tileKey.lastIndexOf('/') + 1, tileKey.length)
.split(',')
.map(Number);
return getKeyZXY(z, x, y);
}
/**
* Get a tile coord given a key.
* @param {string} key The tile coord key.
* @return {TileCoord} The tile coord.
*/
export function fromKey(key) {
return key.split('/').map(Number);
}
/**
* @param {TileCoord} tileCoord Tile coord.
* @return {number} Hash.
*/
export function hash(tileCoord) {
return hashZXY(tileCoord[0], tileCoord[1], tileCoord[2]);
}
/**
* @param {number} z The tile z coordinate.
* @param {number} x The tile x coordinate.
* @param {number} y The tile y coordinate.
* @return {number} Hash.
*/
export function hashZXY(z, x, y) {
return (x << z) + y;
}
/**
* @param {TileCoord} tileCoord Tile coordinate.
* @param {!import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.
* @return {boolean} Tile coordinate is within extent and zoom level range.
*/
export function withinExtentAndZ(tileCoord, tileGrid) {
const z = tileCoord[0];
const x = tileCoord[1];
const y = tileCoord[2];
if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {
return false;
}
const tileRange = tileGrid.getFullTileRange(z);
if (!tileRange) {
return true;
}
return tileRange.containsXY(x, y);
}