前言
小伙伴們大家好,在上一期的推文中我們介紹了如何利用百度地圖的API獲取POI興趣點的相關信息,詳見:
干貨 | 10分鐘教你用Python獲取百度地圖各點的經(jīng)緯度信息
但是只是簡單介紹了API的調(diào)用方式。今天我們來講講如何在Python里面調(diào)用申請的API接口孵户,然后利用Python進行相關的數(shù)據(jù)處理目派,最終得到我們想要的信息然低。
最近大家還是要響應號召仔役,不出門掷伙!在家好好學習吧~
地點檢索方式
目前百度地圖的地點檢索服務有以下4種方式:
行政區(qū)劃區(qū)域檢索:開發(fā)者可通過該功能,檢索某一行政區(qū)劃內(nèi)(目前最細到城市級別)的地點信息又兵。
圓形區(qū)域檢索:開發(fā)者可設置圓心和半徑任柜,檢索圓形區(qū)域內(nèi)的地點信息(常用于周邊檢索場景)。
矩形區(qū)域檢索:開發(fā)者可設置檢索區(qū)域左下角和右上角坐標沛厨,檢索坐標對應矩形內(nèi)的地點信息(常用于手機或PC端地圖視野內(nèi)檢索)
地點詳情檢索:不同于以上三種檢索功能宙地。地點詳情檢索針對指定POI,檢索其相關的詳情信息俄烁。開發(fā)者可以通過三種區(qū)域檢索(或其他服務)功能绸栅,獲取POI id。使用“地點詳情檢索”功能页屠,傳入id粹胯,即可檢索POI詳情信息,如評分辰企、營業(yè)時間等(不同類型POI對應不同類別詳情數(shù)據(jù))风纠。
常用的方式主要是第一種和第二種,今天對這兩種方式都介紹一下牢贸。
行政區(qū)劃區(qū)域檢索
上次說了竹观,API的調(diào)用方式是通過編輯好的URL,請求服務器然后返回所需要的的數(shù)據(jù)潜索,數(shù)據(jù)是JSON或者XML類型的(別問我什么是JSON)臭增。
具體的說明大家去官網(wǎng)看吧balablaba的……這里我就不在BB了,直接貼上一個編輯好的URL:
http://api.map.baidu.com/place/v2/search?query=超市®ion=武漢市&output=json&ak=申請的AK&scope=1&page_size=20&page_num=0
上面URL中竹习,綠色標出的是需要填寫的參數(shù)誊抛。各個參數(shù)的說明如下:
關于其他可選參數(shù)更多詳細信息請戳:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
值得注意的是,page_size=20&page_num=0表示每個URL頁面返回的POI數(shù)量為20個整陌,這個是第0個頁面拗窃,因為在程序中,一般都是從0開始的泌辫。
好了随夸,請求講完了,接下來放Python代碼:
欲下載本文相關的代碼及算例震放,請關注公眾號【程序猿聲】宾毒,后臺回復【PYMAP】不包括【】即可
代碼的思路也相當簡單,首先是構造URL殿遂,然后請求返回JSON格式的數(shù)據(jù)伍俘,Python處理后寫入CSV文件中邪锌。
獲取的數(shù)據(jù)詳情如下所示勉躺,有需要的同學可根據(jù)說明修改相應的參數(shù)獲取相應的數(shù)據(jù):
值得注意的是癌瘾,在實際請求中,百度API限制了檢索只能返回20個URL頁面饵溅。這就意味著我們一個區(qū)域最多只能檢索2020=400個POI點妨退。實際需求中往往不止400個點的。*
但人民的智慧是無窮的蜕企,我們接下來介紹第二種方式解決上面400個點的弊端咬荷。
矩形區(qū)域檢索
所謂矩形區(qū)域檢索,就是給定一個矩形范圍的經(jīng)緯度坐標(實際上兩點即可定位一個矩形轻掩,左下點和右上點)幸乒,然后在該矩形范圍內(nèi)進行興趣點的檢索。
而矩形范圍經(jīng)緯度坐標的確定可以利用之前介紹的坐標拾取系統(tǒng)進行拾取唇牧。
例如下圖在武漢市(武漢加油:痹)拾取一個藍色框的區(qū)域,把左下角的經(jīng)緯度和右上角的經(jīng)緯度記錄下來即可丐重,這樣一個范圍就做好啦腔召。
例如我們拾取了一個矩形:
左下點的經(jīng)緯度為:114.2540523, 30.471019
右上點的經(jīng)緯度為:114.2687126, 30.4877379
現(xiàn)在利用矩形區(qū)域檢索的URL如下:
http://api.map.baidu.com/place/v2/search?query=超市&bounds=30.471019,114.2540523,30.4877379,114.2687126&output=json&ak=申請的AK&scope=1&page_size=20&page_num=0
參數(shù)無太大變化,就是region變成了bounds扮惦,并且指出了矩形區(qū)域的邊界經(jīng)緯度(左下點和右上點)臀蛛。注意綠色處要填上你自己的AK。
好了崖蜜,現(xiàn)在檢查一下URL編輯是否正確浊仆,復制到瀏覽器回車一下看看:
OK,大功告成豫领。好了抡柿,現(xiàn)在我們來解決400個點限制的問題。不知道聰明的你們想到了沒有氏堤。
沒錯沙绝,就是切割區(qū)域。既然百度限制了每個區(qū)域檢索最多只能返回400個點鼠锈,那么可以通過矩形檢索的方式闪檬,將一個大矩形切割成很多小矩形,依次在每個小矩形內(nèi)進行檢索购笆,最后將所有小矩形的結果加起來就有很多很多個點啦粗悯。怎樣,是不是很聰明呢同欠!
例如將一個大區(qū)域分割成1234號區(qū)域分別檢索样傍,假如每個區(qū)域都返回400個點横缔,那么總共就能獲取4X400=1600個點了。
而如何分割衫哥,則不必手動拾取點進行劃分茎刚,可以利用程序來計算嘛!
好了撤逢,下面給出一份分割區(qū)域的Python代碼:
欲下載本文相關的代碼及算例膛锭,請關注公眾號【程序猿聲】,后臺回復【PYMAP】不包括【】即可
讀者只需要簡單修改代碼中的:
查詢關鍵字
關注區(qū)域的左下角和右上角百度地圖坐標(經(jīng)緯度)
定義細分窗口的數(shù)量蚊荣,橫向X * 縱向Y
獲取AK
這幾處的相關信息即可使用初狰,生成的數(shù)據(jù)如下所示:
怎樣,是不是很簡單呢互例!至此奢入,兩種方式已經(jīng)介紹完畢。當然媳叨,獲取經(jīng)緯度信息只是我們的第一步操作腥光,后續(xù)的過程我們將向大家展示如何根據(jù)經(jīng)緯度信息獲取兩點之間的真實距離。