在Javascript中XY坐标到四叉树

时间:2014-08-08 08:25:01

标签: javascript coordinates quadtree

我想将Converts tile XY坐标转换为指定细节级别的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。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

在您链接的bing地图中,您可以看到级别2的四元组t0t3是x = 1且y = 1的区块。坐标以(0,0)开头,你正在看第2级!在级别,四元组是qt3。

答案 1 :(得分:-1)

该功能的实施是正确的,结果也是如此。 (1,1)中的tile具有03的四元组键。它不是左上角:左上角的tile是(0,0)。