Add ol.TileCoord.toQuadKey and createFromQuadKey
This commit is contained in:
@@ -4,6 +4,17 @@ goog.require('goog.array');
|
|||||||
goog.require('ol.Coordinate');
|
goog.require('ol.Coordinate');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @enum {number}
|
||||||
|
*/
|
||||||
|
ol.QuadKeyCharCode = {
|
||||||
|
ZERO: '0'.charCodeAt(0),
|
||||||
|
ONE: '1'.charCodeAt(0),
|
||||||
|
TWO: '2'.charCodeAt(0),
|
||||||
|
THREE: '3'.charCodeAt(0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
@@ -25,6 +36,33 @@ ol.TileCoord = function(z, x, y) {
|
|||||||
goog.inherits(ol.TileCoord, ol.Coordinate);
|
goog.inherits(ol.TileCoord, ol.Coordinate);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} quadKey Quad key.
|
||||||
|
* @return {ol.TileCoord} Tile coordinate.
|
||||||
|
*/
|
||||||
|
ol.TileCoord.createFromQuadKey = function(quadKey) {
|
||||||
|
var z = quadKey.length, x = 0, y = 0;
|
||||||
|
var mask = 1 << (z - 1);
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < z; ++i) {
|
||||||
|
switch (quadKey.charCodeAt(i)) {
|
||||||
|
case ol.QuadKeyCharCode.ONE:
|
||||||
|
x += mask;
|
||||||
|
break;
|
||||||
|
case ol.QuadKeyCharCode.TWO:
|
||||||
|
y += mask;
|
||||||
|
break;
|
||||||
|
case ol.QuadKeyCharCode.THREE:
|
||||||
|
x += mask;
|
||||||
|
y += mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mask >>= 1;
|
||||||
|
}
|
||||||
|
return new ol.TileCoord(z, x, y);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {ol.TileCoord} Clone.
|
* @return {ol.TileCoord} Clone.
|
||||||
*/
|
*/
|
||||||
@@ -41,6 +79,28 @@ ol.TileCoord.prototype.hash = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {string} Quad key.
|
||||||
|
*/
|
||||||
|
ol.TileCoord.prototype.toQuadKey = function() {
|
||||||
|
var digits = new Array(this.z);
|
||||||
|
var mask = 1 << (this.z - 1);
|
||||||
|
var i, charCode;
|
||||||
|
for (i = 0; i < this.z; ++i) {
|
||||||
|
charCode = ol.QuadKeyCharCode.ZERO;
|
||||||
|
if (this.x & mask) {
|
||||||
|
charCode += 1;
|
||||||
|
}
|
||||||
|
if (this.y & mask) {
|
||||||
|
charCode += 2;
|
||||||
|
}
|
||||||
|
digits[i] = String.fromCharCode(charCode);
|
||||||
|
mask >>= 1;
|
||||||
|
}
|
||||||
|
return digits.join('');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {string} String.
|
* @return {string} String.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,6 +2,14 @@ goog.require('goog.testing.jsunit');
|
|||||||
goog.require('ol.TileCoord');
|
goog.require('ol.TileCoord');
|
||||||
|
|
||||||
|
|
||||||
|
function testCreateFromQuadKey() {
|
||||||
|
var tileCoord = ol.TileCoord.createFromQuadKey('213');
|
||||||
|
assertEquals(3, tileCoord.z);
|
||||||
|
assertEquals(3, tileCoord.x);
|
||||||
|
assertEquals(5, tileCoord.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function testConstructorOrderZXY() {
|
function testConstructorOrderZXY() {
|
||||||
var tc1 = new ol.TileCoord(1, 2, 3);
|
var tc1 = new ol.TileCoord(1, 2, 3);
|
||||||
assertEquals(1, tc1.z);
|
assertEquals(1, tc1.z);
|
||||||
@@ -24,3 +32,8 @@ function testFromString() {
|
|||||||
assertEquals(2, tc.x);
|
assertEquals(2, tc.x);
|
||||||
assertEquals(3, tc.y);
|
assertEquals(3, tc.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function testToQuadKey() {
|
||||||
|
assertEquals('213', (new ol.TileCoord(3, 3, 5)).toQuadKey());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user