這是參考Google Tile Map或Bing Maps。是否可以通過任何類型的內部計算得到Tile Count,Tile X,Tile Y細節而不指定縮放級別(或LevelOfDetails)?如何在不指定縮放級別(或LevelOfDetails)的情況下獲得平鋪計數,平鋪X,平鋪Y細節?
客戶端只會給座標P1,P2,並要求瓷磚地圖和外接矩形等
希爾帕
這是參考Google Tile Map或Bing Maps。是否可以通過任何類型的內部計算得到Tile Count,Tile X,Tile Y細節而不指定縮放級別(或LevelOfDetails)?如何在不指定縮放級別(或LevelOfDetails)的情況下獲得平鋪計數,平鋪X,平鋪Y細節?
客戶端只會給座標P1,P2,並要求瓷磚地圖和外接矩形等
希爾帕
每瓦爲256個像素×256個像素。
縮放級別0是1瓦。 (1 x 1)
縮放級別1是4個拼貼。 (2 x 2)
縮放級別2是16個圖塊。 (4 x 4)
縮放級別3是64個圖塊。 (8×8)
縮放級別4爲256瓦(16×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座標的計算在Wikipedia文章中。
您可以將墨卡託投影上的任意點映射到拼貼集。平鋪集是縮放級別的平鋪集。您必須知道縮放級別才能知道要訪問哪個圖塊集並計算要設置爲檢索並顯示的圖塊集中的哪個圖塊。
此博客文章Google Mapping給出了將(緯度,經度,縮放)轉換爲(x,y,縮放)的公式,其中x和y表示縮放集中的圖塊。
您可能想要查看OSM tilenames的wiki。除y軸方向外,它們幾乎與Google瓷磚相同。有很多的代碼示例說明是在這裏:http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
+1。簡直不敢相信這個資源是可用的,我花了更多的時間尋找最終編寫自己的代碼。作爲編碼器的生活... – 2013-07-25 15:52:08
如果你有一個邊界框,你可以使用這條巨蟒功能查找縮放級別(或類似的功能在你的編程語言的選擇):
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。
而不是使用'dict',你可以使用'list'來代替並簡化列表理解:'[round(i,r)for i in data] + [dne]' – tjameson 2014-12-03 16:17:47
謝謝,關於每個縮放級別的瓦片數量的這方面的信息被證明非常有用 – paullb 2012-07-02 02:08:11
更好的表達方式是瓦片的數量等於:(2^zoom * 2^zoom) – 88ad 2013-03-22 18:28:58
謝謝你。用於捕獲加載到mapview的瓦片數量的方法是什麼? – TharakaNirmana 2013-06-26 03:34:36