如何在不指定缩放级别(或LevelOfDetails)的情况下获得Tile Count,Tile X,Tile Y细节?

时间:2010-07-13 15:17:42

标签: google-maps bing-maps

这是参考Google Tile Map或Bing Maps。是否可以通过任何内部计算指定缩放级别(或LevelOfDetails)来获取Tile Count,Tile X,Tile Y细节?

客户只会给出坐标P1和P2,并要求提供平铺地图和绑定框等

希尔帕

3 个答案:

答案 0 :(得分:15)

每个图块为256像素×256像素。

缩放级别0是1个图块。 (1 x 1)

缩放级别1是4个图块。 (2 x 2)

缩放级别2是16个图块。 (4 x 4)

缩放级别3是64个图块。 (8 x 8)

缩放级别4为256个图块(16 x 16)

每个缩放级别的x和y计数加倍。根据88ad的评论,瓷砖数量的公式是(2 ^ zoom x 2 ^ zoom)。

我希望您可以通过缩放级别18完成剩余的数学计算。为了节省空间,不会存储海洋图块。它们是作为对请求的响应而创建的。

在缩放级别3,图块在x方向(经度)上从0到7编号,在y方向(纬度)从0到7编号。

瓷砖从国际日期线附近的美国一侧(经度-180或+180)开始。瓦片0,0开始于北纬70°左右。

有关球体如何映射到平面的更多详细信息,请参阅维基百科文章Mercator Projection。将经度和纬度转换为x和y坐标的计算在维基百科文章中。

您可以将墨卡托投影上的任何点映射到图块集。图块集是缩放级别的图块集。您必须知道缩放级别才能知道要访问的图块集,并计算要检索和显示的图块集中的哪个图块。

此博客文章Google Mapping提供了将(纬度,经度,缩放)转换为(x,y,缩放)的公式,其中x和y表示缩放集中的图块。

答案 1 :(得分:4)

您可能需要查看OSM磁贴的维基。它们几乎与谷歌瓷砖相同,除了y轴方向。这里有很多代码示例的说明:http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

答案 2 :(得分:1)

如果你有一个边界框,你可以使用这个python函数来查找缩放级别(或编程语言选择中的类似函数):

def level_dic():
    '''
    http://wiki.openstreetmap.org/wiki/Zoom_levels
    '''
    data = {0: 360.0,
        1: 180.0,
        2: 90.0,
        3: 45.0,
        4: 22.5,
        5: 11.25,
        6: 5.625,
        7: 2.813,
        8: 1.406,
        9: 0.703,
        10: 0.352,
        11: 0.176,
        12: 0.088,
        13: 0.044,
        14: 0.022,
        15: 0.011,
        16: 0.005,
        17: 0.003,
        18: 0.001,
        19: 0.0005}

    return data


def getzoom(self):
    data = level_dic()  # our presets
    a, b, c, d = bbox
    r = 3
    dne = abs(round(float(c) - float(a), r))  # ne: North East point
    mylist = [round(i, r) for i in data.values()] + [dne]
    new = sorted(mylist, reverse=True)
    return new.index(dne)

我使用了this reference。其余的很简单。您需要使用Slippy_map_tilenames