XY坐标到Javascript中的四叉树

XY coordinates to quadtree in Javascript

本文关键字:四叉树 Javascript 坐标 XY      更新时间:2023-09-26

我想转换将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。

我做错了什么?

在链接的bing地图中,你可以看到关卡2的四键t0t3是x=1和y=1处的贴图。坐标从(0,0)开始,你看到的是第2层!

函数的实现是正确的,结果也是正确的。(1,1)中的贴图的四键值为03。它不是左上角:左上角的tile是(0,0)