Move quadKey function to the one place it is used

This commit is contained in:
Tim Schaub
2018-11-20 13:31:54 -07:00
parent 60b3370bba
commit 37c987de0a
4 changed files with 36 additions and 37 deletions

View File

@@ -8,10 +8,35 @@ import {jsonp as requestJSONP} from '../net.js';
import {get as getProjection, getTransformFromProjections} from '../proj.js'; import {get as getProjection, getTransformFromProjections} from '../proj.js';
import SourceState from './State.js'; import SourceState from './State.js';
import TileImage from './TileImage.js'; import TileImage from './TileImage.js';
import {createOrUpdate, quadKey} from '../tilecoord.js'; import {createOrUpdate} from '../tilecoord.js';
import {createXYZ, extentFromProjection} from '../tilegrid.js'; import {createXYZ, extentFromProjection} from '../tilegrid.js';
/**
* @param {import('../tilecoord.js').TileCoord} tileCoord Tile coord.
* @return {string} Quad key.
*/
export function quadKey(tileCoord) {
const z = tileCoord[0];
const digits = new Array(z);
let mask = 1 << (z - 1);
let i, charCode;
for (i = 0; i < z; ++i) {
// 48 is charCode for 0 - '0'.charCodeAt(0)
charCode = 48;
if (tileCoord[1] & mask) {
charCode += 1;
}
if (tileCoord[2] & mask) {
charCode += 2;
}
digits[i] = String.fromCharCode(charCode);
mask >>= 1;
}
return digits.join('');
}
/** /**
* The attribution containing a link to the Microsoft® Bing™ Maps Platform APIs * The attribution containing a link to the Microsoft® Bing™ Maps Platform APIs
* Terms Of Use. * Terms Of Use.
@@ -209,6 +234,7 @@ class BingMaps extends TileImage {
const hidpi = this.hidpi_; const hidpi = this.hidpi_;
this.tileUrlFunction = createFromTileUrlFunctions( this.tileUrlFunction = createFromTileUrlFunctions(
resource.imageUrlSubdomains.map(function(subdomain) { resource.imageUrlSubdomains.map(function(subdomain) {
/** @type {import('../tilecoord.js').TileCoord} */
const quadKeyTileCoord = [0, 0, 0]; const quadKeyTileCoord = [0, 0, 0];
const imageUrl = resource.imageUrl const imageUrl = resource.imageUrl
.replace('{subdomain}', subdomain) .replace('{subdomain}', subdomain)

View File

@@ -70,31 +70,6 @@ export function hash(tileCoord) {
} }
/**
* @param {TileCoord} tileCoord Tile coord.
* @return {string} Quad key.
*/
export function quadKey(tileCoord) {
const z = tileCoord[0];
const digits = new Array(z);
let mask = 1 << (z - 1);
let i, charCode;
for (i = 0; i < z; ++i) {
// 48 is charCode for 0 - '0'.charCodeAt(0)
charCode = 48;
if (tileCoord[1] & mask) {
charCode += 1;
}
if (tileCoord[2] & mask) {
charCode += 2;
}
digits[i] = String.fromCharCode(charCode);
mask >>= 1;
}
return digits.join('');
}
/** /**
* @param {TileCoord} tileCoord Tile coordinate. * @param {TileCoord} tileCoord Tile coordinate.
* @param {!import("./tilegrid/TileGrid.js").default} tileGrid Tile grid. * @param {!import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.

View File

@@ -1,10 +1,17 @@
import BingMaps from '../../../../src/ol/source/BingMaps.js'; import BingMaps, {quadKey} from '../../../../src/ol/source/BingMaps.js';
import {quadKey} from '../../../../src/ol/tilecoord.js';
import {unByKey} from '../../../../src/ol/Observable.js'; import {unByKey} from '../../../../src/ol/Observable.js';
describe('ol.source.BingMaps', function() { describe('ol.source.BingMaps', function() {
describe('quadKey()', function() {
it('returns expected string', function() {
const tileCoord = [3, 3, 5];
const s = quadKey(tileCoord);
expect(s).to.eql('213');
});
});
describe('#tileUrlFunction()', function() { describe('#tileUrlFunction()', function() {
let source, tileGrid; let source, tileGrid;

View File

@@ -1,5 +1,4 @@
import { import {
quadKey,
getKey, getKey,
fromKey, fromKey,
hash, hash,
@@ -19,14 +18,6 @@ describe('ol.TileCoord', function() {
}); });
}); });
describe('call quadKey', function() {
it('returns expected string', function() {
const tileCoord = [3, 3, 5];
const s = quadKey(tileCoord);
expect(s).to.eql('213');
});
});
describe('getKey()', function() { describe('getKey()', function() {
it('returns a key for a tile coord', function() { it('returns a key for a tile coord', function() {
const key = getKey([1, 2, 3]); const key = getKey([1, 2, 3]);