OpenStreetMap(簡稱OSM) 開源wiki地圖。
https://www.openstreetmap.org/#map=12/39.9022/116.3848
一般的地圖都是通過在背景釋出切片,前端的引擎讀取進行展示,地圖切片有些是用經緯度切的,有些是用谷歌的墨卡托切的,是以根據一定的坐标範圍和縮放等級,就能計算其中的切片橫縱順序,得到詳細的z(縮放)、x(橫向)、y(縱向)數字,再根據基礎的伺服器url,就可以将本張切片下載下傳到本地,多張切片合并成一張,賦予坐标資訊,就變成地圖影像了,一般的地圖下載下傳工具也是按照這個原理進行下載下傳生成的。
OSM是一個開源開放的地圖,它的地圖切片是按照經緯度切的,即EPSG:4326的,在經緯度計算切片的時候,并不需要把坐标轉換成web墨卡托的坐标,下邊分享一個根據經緯度坐标計算切片順序的代碼(python):
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return (xtile, ytile)
傳入經緯度坐标和縮放級别,就能找到坐标是在哪張切片上,經度方向是等分的,這個在計算的時候就比較簡單,緯度是在高緯度的距離變窄,是以,要通過一個複雜的數學公式計算,等級越高,切片數量越多,下載下傳的切片就越多,是按照平方的數量進行增加的。
下載下傳的切片坐标範圍,并不一定是和傳入的坐标範圍相同,是以,地圖下載下傳器有時也是,合并的影像并不是傳入的四個範圍,這個在後期要有一定地圖裁切。
一個基礎的OSM切片位址:
https://b.tile.openstreetmap.org/{0}/{1}/{2}.png
一張下載下傳的切片,合并的時候可以使用gdal等類庫,這對合并和計算合并完成後的地圖四至有相當友善的幫助。

更多文章請關注公衆号