前言
小伙伴們大家好,在上一期的推文中我們介紹了如何利用百度地圖的API獲取POI興趣點的相關信息,詳見:
干貨 | 10分鍾教你用Python獲取百度地圖各點的經緯度信息
但是只是簡單介紹了API的調用方式。今天我們來講講如何在Python里面調用申請的API接口,然后利用Python進行相關的數據處理,最終得到我們想要的信息。
最近大家還是要響應號召,不出門!在家好好學習吧~
地點檢索方式
目前百度地圖的地點檢索服務有以下4種方式:
行政區划區域檢索:開發者可通過該功能,檢索某一行政區划內(目前最細到城市級別)的地點信息。
圓形區域檢索:開發者可設置圓心和半徑,檢索圓形區域內的地點信息(常用於周邊檢索場景)。
矩形區域檢索:開發者可設置檢索區域左下角和右上角坐標,檢索坐標對應矩形內的地點信息(常用於手機或PC端地圖視野內檢索)
地點詳情檢索:不同於以上三種檢索功能。地點詳情檢索針對指定POI,檢索其相關的詳情信息。開發者可以通過三種區域檢索(或其他服務)功能,獲取POI id。使用“地點詳情檢索”功能,傳入id,即可檢索POI詳情信息,如評分、營業時間等(不同類型POI對應不同類別詳情數據)。
常用的方式主要是第一種和第二種,今天對這兩種方式都介紹一下。
行政區划區域檢索
上次說了,API的調用方式是通過編輯好的URL,請求服務器然后返回所需要的的數據,數據是JSON或者XML類型的(別問我什么是JSON)。
具體的說明大家去官網看吧balablaba的……這里我就不在BB了,直接貼上一個編輯好的URL:
上面URL中,綠色標出的是需要填寫的參數。各個參數的說明如下:
關於其他可選參數更多詳細信息請戳:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
值得注意的是,page_size=20&page_num=0表示每個URL頁面返回的POI數量為20個,這個是第0個頁面,因為在程序中,一般都是從0開始的。
好了,請求講完了,接下來放Python代碼:
欲下載本文相關的代碼及算例,請關注公眾號【程序猿聲】,后台回復【PYMAP】不包括【】即可
代碼的思路也相當簡單,首先是構造URL,然后請求返回JSON格式的數據,Python處理后寫入CSV文件中。
獲取的數據詳情如下所示,有需要的同學可根據說明修改相應的參數獲取相應的數據:
值得注意的是,在實際請求中,百度API限制了檢索只能返回20個URL頁面。這就意味着我們一個區域最多只能檢索20*20=400個POI點。實際需求中往往不止400個點的。
但人民的智慧是無窮的,我們接下來介紹第二種方式解決上面400個點的弊端。
矩形區域檢索
所謂矩形區域檢索,就是給定一個矩形范圍的經緯度坐標(實際上兩點即可定位一個矩形,左下點和右上點),然后在該矩形范圍內進行興趣點的檢索。
而矩形范圍經緯度坐標的確定可以利用之前介紹的坐標拾取系統進行拾取。
例如下圖在武漢市(武漢加油!)拾取一個藍色框的區域,把左下角的經緯度和右上角的經緯度記錄下來即可,這樣一個范圍就做好啦。
例如我們拾取了一個矩形:
左下點的經緯度為:114.2540523, 30.471019
右上點的經緯度為:114.2687126, 30.4877379
現在利用矩形區域檢索的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
參數無太大變化,就是region變成了bounds,並且指出了矩形區域的邊界經緯度(左下點和右上點)。注意綠色處要填上你自己的AK。
好了,現在檢查一下URL編輯是否正確,復制到瀏覽器回車一下看看:
OK,大功告成。好了,現在我們來解決400個點限制的問題。不知道聰明的你們想到了沒有。
沒錯,就是切割區域。既然百度限制了每個區域檢索最多只能返回400個點,那么可以通過矩形檢索的方式,將一個大矩形切割成很多小矩形,依次在每個小矩形內進行檢索,最后將所有小矩形的結果加起來就有很多很多個點啦。怎樣,是不是很聰明呢!
例如將一個大區域分割成1234號區域分別檢索,假如每個區域都返回400個點,那么總共就能獲取4X400=1600個點了。
而如何分割,則不必手動拾取點進行划分,可以利用程序來計算嘛!
好了,下面給出一份分割區域的Python代碼:
欲下載本文相關的代碼及算例,請關注公眾號【程序猿聲】,后台回復【PYMAP】不包括【】即可
讀者只需要簡單修改代碼中的:
-
查詢關鍵字
-
關注區域的左下角和右上角百度地圖坐標(經緯度)
-
定義細分窗口的數量,橫向X * 縱向Y
-
獲取AK
這幾處的相關信息即可使用,生成的數據如下所示:
怎樣,是不是很簡單呢!至此,兩種方式已經介紹完畢。當然,獲取經緯度信息只是我們的第一步操作,后續的過程我們將向大家展示如何根據經緯度信息獲取兩點之間的真實距離。