这是参考 Google Tile Map 或 Bing Maps。是否可以在不使用任何类型的内部计算指定缩放级别(或 LevelOfDetails)的情况下获得 Tile Count、Tile X、Tile Y 详细信息?
客户将只提供坐标 P1 和 P2,并要求提供 Tile Map 和 Bound Box 等。
希尔帕
这是参考 Google Tile Map 或 Bing Maps。是否可以在不使用任何类型的内部计算指定缩放级别(或 LevelOfDetails)的情况下获得 Tile Count、Tile X、Tile Y 详细信息?
客户将只提供坐标 P1 和 P2,并要求提供 Tile Map 和 Bound Box 等。
希尔帕
每个图块为 256 x 256 像素。
缩放级别 0 是 1 个图块。(1 x 1)
缩放级别 1 是 4 个图块。(2 x 2)
缩放级别 2 为 16 个图块。(4×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 度。
有关如何将球体映射到平面的更多详细信息,请参阅 Wikipedia 文章墨卡托投影。将经度和纬度转换为 x 和 y 坐标的计算在 Wikipedia 文章中。
您可以将墨卡托投影上的任何点映射到图块集。瓦片集是缩放级别的瓦片集。您必须知道缩放级别才能知道要访问哪个图块集并计算要检索和显示的图块集中的哪个图块。
这篇博客文章Google Mapping给出了将 (latitude, longitude, zoom) 转换为 (x, y, zoom) 的公式,其中 x 和 y 表示缩放集中的图块。
您可能想查看 OSM tilenames 的 wiki。除了 y 轴方向外,它们与谷歌图块几乎相同。这里有很多代码示例的描述:http ://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
如果您有一个边界框,您可以使用这个 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)
我使用了这个参考。剩下的很简单。您需要使用Slippy_map_tilenames。