这是参考Google Tile Map或Bing Maps。是否可以通过任何内部计算指定缩放级别(或LevelOfDetails)来获取Tile Count,Tile X,Tile Y细节?
客户只会给出坐标P1和P2,并要求提供平铺地图和绑定框等
希尔帕
答案 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。