Координаты XY для дерева квадрантов в Javascript

Я хочу преобразовать координаты XY плитки Converts в QuadKey с заданным уровнем детализации.

Мне нужно сделать это в Javascript. Чтобы проиллюстрировать проблему, вы найдете точное описание здесь: http://msdn.microsoft.com/en-us/library/bb259689.aspx и там же можно найти функцию на C#. Имя функции: tileXYToQuadKey.

Мне нужно реализовать это в Javascript. Вот JSFiddle, который я сделал:

http://jsfiddle.net/cueqzapper/m44bgk1p/

var tileXYToQuadKey = function(tileX, tileY, levelOfDetail)
{
    quadKey = 'q';
    for (var i = levelOfDetail; i > 0; i--)
    {
        var digit = 0;
        var mask = 1 << (i - 1);
        console.log(mask);
        if ((tileX & mask) != 0)
        {
            digit++;
        }
        if ((tileY & mask) != 0)
        {
            digit++;
            digit++;
        }
        quadKey += 't' + digit;
    }
    return quadKey;
}
console.log(tileXYToQuadKey(1,1,2));

Но что-то не так. Когда я вызываю функцию следующим образом: tileXYToQuadKey(1,1,2), я возвращаю qt0t3. Но правильным было бы qt0t0, потому что тайл с координатами x=1, y=1, очевидно, будет в верхнем левом углу, а значит, у него будет четырехъядерный ключ 00.

Что я делаю не так?


person Simon S.    schedule 08.08.2014    source источник


Ответы (2)


Реализация функции правильная, как и результаты. Плитка в (1,1) имеет quadkey 03. Это не верхний левый угол: плитка в верхнем левом углу (0,0).

person lpg    schedule 08.08.2014
comment
Да, ты прав. Здесь все правильно. Координаты просто не начинаются с (1,1), они начинаются с (0,0). Спасибо, в любом случае! - person Simon S.; 08.08.2014
comment
Квадратный ключ t0t3, а не 30. - person Gigamegs; 08.08.2014
comment
истинный. я меняю это - person lpg; 12.08.2014

На картах Bing по вашей ссылке вы можете видеть, что quadkey t0t3 уровня 2 — это плитка с координатами x = 1 и y = 1. Координаты начинаются с (0,0), и вы смотрите на уровень 2! На уровне quadkey есть qt3.

person Gigamegs    schedule 08.08.2014