如何将地图图块的x,y和缩放坐标转换为四叉树地图系统中的相应坐标?

时间:2014-05-26 18:37:26

标签: python google-maps map pseudocode quadtree

我正在尝试从网络服务访问地图图块。

图块以quad-tree like this组织。在文件系统中,它们被组织起来,例如,3/0/0/1/1/2.png指的是从底部开始,在第三象限下,然后是第0个象限,然后是第0个,第四个等等的瓦片。

在我的应用程序中,我被要求提供地图图块的x,y和缩放值,我必须返回一个URL。如何将这些值转换为上述文件路径格式?

found这个python脚本声称将x,y和缩放值转换为谷歌地图平铺标识符,可以某种方式用于访问给定的平铺,但我无法弄清楚我将如何修改它以我想要的格式输出:

def quadtree(x,y, zoom):
    out = []
    m = {(0,0):'q', (0,1):'t', (1,0):'r', (1,1):'s'}
    for i in range(17-zoom):
        x, rx = divmod(x, 2)
        y, ry = divmod(y, 2)
        out.insert(0, m[(rx,ry)])
    return 't' + ''.join(out)

下面是一个示例执行:

>>> quadtree(20,49,10)
'tqtsqrqt'

我想要发生什么:

>>> quadtree(5,3,3)
    '2/1/3'

这显然不在我想要的输出附近,但它似乎是一个起点(我猜)。

我将采用任何编码语言(或伪代码)的解决方案或建议。

2 个答案:

答案 0 :(得分:1)

您可以分别用0,1,2和3替换'q','t','r'和's'。

答案 1 :(得分:1)

有一个小的PyPi包有助于转换。 https://github.com/geometalab/pyGeoTile

它来自Github上的pyGeoTile存储库。 {{3}}

这是一个用法示例:

from pygeotile.tile import Tile

tms_x, tms_y, zoom = 134494, 329369, 19
tile = Tile.from_tms(tms_x=tms_x, tms_y=tms_y, zoom=19)  # Tile Map Service (TMS) X Y and zoom

print('QuadTree: ', tile.quad_tree)  # QuadTree:  0302222310303211330
print('Google: ', tile.google)  # Google:  (134494, 194918)