(1)申請(qǐng)百度地圖API信令
? ? 訪問(wèn)百度地圖API需要一個(gè)信令(AK),打開(kāi)百度地圖開(kāi)放平臺(tái)(http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5),點(diǎn)擊右上角“API控制臺(tái)”酪刀,進(jìn)入了百度地圖的開(kāi)發(fā)界面虚缎。
選擇“創(chuàng)建應(yīng)用”-應(yīng)用類型勾選“服務(wù)器端”–勾選所用到的服務(wù)(一般全選即可)淀弹,此時(shí)就創(chuàng)建好了應(yīng)用賬號(hào),得到“AK”拳话。
(2)獲取目標(biāo)區(qū)域的經(jīng)緯度
? ? 利用百度地圖坐標(biāo)拾取系統(tǒng)(http://api.map.baidu.com/lbsapi/getpoint/index.html)獲取矩形目標(biāo)區(qū)域的左下角和右上角兩點(diǎn)的經(jīng)緯度
(3)要獲取的POI類型
? ? 百度地圖Place API提供的POI提供二級(jí)行業(yè)分類(http://lbsyun.baidu.com/index.phptitle=lbscloud/poitags)
? ? 選擇你需要的行業(yè)分類
(4)獲取POI信息
? ? 適用于Python3姻氨,同時(shí)需要安裝requests、json穆壕、xlwt庫(kù)
只需要修改query、left_bottom其屏、right_top喇勋、ak四個(gè)參數(shù)
query:第三步中選擇的行業(yè)分類(注意'')
left_bottom:第二步中左下角的經(jīng)緯度(經(jīng)度在前,緯度在后偎行,中間用逗號(hào)隔開(kāi))
right_top:第二步中右上角的經(jīng)緯度
ak:第一步中獲取的AK秘鑰
import requests
import json
import time
import xlwt
query = '企業(yè)'? ? #關(guān)鍵詞
left_bottom = [108.915,34.246]? ? #左下角的經(jīng)緯度
right_top = [108.995,34.255]? ? #右上角的經(jīng)緯度
ak = 'xxxxxxxxxxx'? #百度地圖API信令A(yù)K
left_bottom_part = []
right_top_part = []
urllist = []
r = 0
part_n = 1
p = 1
col = 0
row = 0
result =[]
wb = xlwt.Workbook()
ws = wb.add_sheet('result')
url0 = 'http://api.map.baidu.com/place/v2/search?'? ?
url = url0 +'query=' + query + '&bounds='+ str(left_bottom[1]) + ',' + str(left_bottom[0]) + ',' + str(right_top[1])+ ',' + str(right_top[0]) + '&page_size=20&page_num=0&output=json&ak=' + ak
data = requests.get(url).text
data_json = json.loads(data)
total = data_json['total']
while total == 400:
? ? part_n = part_n *2
? ? a = []
? ? for i in range(part_n):
? ? ? ? for j in range(part_n):
? ? ? ? ? ? x_item = (right_top[0]-left_bottom[0])/part_n
? ? ? ? ? ? y_item = (right_top[1]-left_bottom[1])/part_n
? ? ? ? ? ? left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item]
? ? ? ? ? ? right_top_part = [left_bottom[0]+(i+1)*x_item,left_bottom[1]+(j+1)*y_item]
? ? ? ? ? ? url = url0 +'query=' + query + '&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ',' + str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&page_size=20&page_num=0&output=json&ak=' + ak
? ? ? ? ? ? data = requests.get(url).text
? ? ? ? ? ? data_json = json.loads(data)
? ? ? ? ? ? a.append(data_json['total'])
? ? ? ? ? ? time.sleep(1)
? ? total = max(a)
? ? pass
for m in range(part_n):
? ? for n in range(part_n):
? ? ? ? b = 0
? ? ? ? x_item = (right_top[0]-left_bottom[0])/part_n
? ? ? ? y_item = (right_top[1]-left_bottom[1])/part_n
? ? ? ? left_bottom_part = [left_bottom[0]+m*x_item,left_bottom[1]+n*y_item]
? ? ? ? right_top_part = [left_bottom[0]+(m+1)*x_item,left_bottom[1]+(n+1)*y_item]
? ? ? ? url1 = url0 +'query=' + query + '&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ',' + str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&page_size=20&page_num=0&output=json&ak=' + ak
? ? ? ? data = requests.get(url1).text
? ? ? ? data_json = json.loads(data)
? ? ? ? if data_json['total']%20 ==0:
? ? ? ? ? ? b = data_json['total']/20
? ? ? ? else:
? ? ? ? ? ? b = data_json['total']//20+1
? ? ? ? for c in range(int(b)):
? ? ? ? ? ? url2 = url0 +'query=' + query + '&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ',' + str(right_top_part[1])+ ',' + str(right_top_part[0])+ '&page_size=20&page_num='+ str(c) +'&output=json&ak=' + ak
? ? ? ? ? ? data = requests.get(url2).text
? ? ? ? ? ? data_json = json.loads(data)
? ? ? ? ? ? result.append(data_json['results'])
? ? ? ? ? ? print('第'+str(p)+'頁(yè)成功'+','+str(data_json['total'])+'條數(shù)據(jù)載入')
? ? ? ? ? ? p +=1
? ? ? ? ? ? urllist.append(url2)
? ? ? ? ? ? time.sleep(1)
for e in result:
? ? for g in e:
? ? ? ? ws.write(row,0,str(g))
? ? ? ? row +=1
wb.save('result.xls')
(5)數(shù)據(jù)清洗
? ? Excel中“數(shù)據(jù)”-“分列”-分隔符號(hào)-“川背,”
“查找替換”將文本中不要的內(nèi)容刪去
注:獲取的數(shù)據(jù)為百度坐標(biāo)系,可以通過(guò)http://mapclub.cn/archives/2168轉(zhuǎn)換為國(guó)測(cè)局坐標(biāo)系
(6)數(shù)據(jù)可視化
? ? 可以用Powermap對(duì)數(shù)據(jù)進(jìn)行分析蛤袒,也可以導(dǎo)入gis分析熄云。