Python 筆記八:簡(jiǎn)單瓦片下載工具pyMap

Python筆記八:簡(jiǎn)單瓦片下載工具pyMap

這是一個(gè)簡(jiǎn)單的實(shí)例,去實(shí)現(xiàn)地圖下載工具。如今又很多瓦片的下載工具,但是都是收費(fèi)的,感覺(jué)奇怪的是既然是盜版還要收費(fèi)。我決心用python寫一個(gè)簡(jiǎn)單瓦片地圖下載器,將瓦片下載拼接成對(duì)應(yīng)的圖片。

經(jīng)供參考,不要從事商業(yè)用途,后果自負(fù)。

依賴

  • python3.5
  • requests 負(fù)責(zé)下載功能
  • pillow 負(fù)責(zé)圖片拼接
  • tqdm 負(fù)責(zé)進(jìn)度條

安裝

  1. 安裝python3.5

  2. 安裝對(duì)應(yīng)的第三方庫(kù)

pip install -r requirement.txt

原理

兩個(gè)主要函數(shù)分別是process_latlngprocess_tilenum。前者使用經(jīng)緯度進(jìn)行處理,如osm,mapbox,天地圖等。其中將經(jīng)緯度轉(zhuǎn)換成為瓦片編號(hào),然后使用后者的方法。后者采用瓦片編號(hào)去下載瓦片。
由于有些地圖系統(tǒng)的瓦片編號(hào),經(jīng)加密后十分怪異,如百度地圖。

下載瓦片則是采用request獲取下載到指定的文件夾。

最后將瓦片地圖進(jìn)行拼接,運(yùn)用pillow的在指定位置粘貼的方法,得到最后的成果。

output_im = Image.new("RGB", (size_x, size_y))

for x in trange(left, right + 1):
        for y in trange(top, bottom + 1):
            path = './tiles/%i/%i/%i' % (zoom, x, y)
            target_im = Image.open(path)
            output_im.paste(target_im, (256 * (x - left), 256 * (y - top)))

用法

使用前,將對(duì)應(yīng)的經(jīng)緯度查看對(duì)應(yīng)左上和右下的坐標(biāo)。

運(yùn)用命令行

python pyMap.py 22.456671 113.889962 22.345576 114.212686 13 output/sample.png
  • 參數(shù)1: 西北角緯度
  • 參數(shù)2: 西北角經(jīng)度
  • 參數(shù)3: 東南角緯度
  • 參數(shù)4: 東南角經(jīng)度
  • 參數(shù)5: 比例尺級(jí)別
  • 參數(shù)6: 輸出路徑(默認(rèn)'output/mosaic.png')

hard code test function

請(qǐng)自修修改,下面是通過(guò)經(jīng)緯度下載數(shù)據(jù)。

def test():
    process_latlng(22.4566710000, 113.8899620000, 22.3455760000, 114.2126860000, 13)

或者通過(guò)瓦片編號(hào)下載數(shù)據(jù)。

def test():
    process_tilenum(1566, 1788, 1976, 2149, 9, "output/overlay.png")

考慮到谷歌地圖

由于谷歌地圖的數(shù)據(jù)最清晰,我想爬谷歌的數(shù)據(jù),但是谷歌地圖需要翻墻,而requests不能直接翻墻。所以我參考了lantern訪問(wèn)中文維基百科及selenium爬取維基百科語(yǔ)料。

源碼github地址在此,記得點(diǎn)星:
https://github.com/brandonxiang/pyMap_GFW

通過(guò)selenium控制瀏覽器截圖,但是網(wǎng)速的限制導(dǎo)致成功率下降,給后期處理帶來(lái)巨大麻煩。該項(xiàng)目已棄用,如果有更好方法請(qǐng)?jiān)u論留言。

最后

結(jié)合所有的內(nèi)容,網(wǎng)頁(yè)版本為Python 筆記八(續(xù)):瓦片下載器網(wǎng)頁(yè)版pyMap-webapp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容