python調(diào)用百度地圖API實(shí)現(xiàn)經(jīng)緯度換算浊竟、熱力地圖全流程指南

基于地圖的數(shù)據(jù)可視化應(yīng)用愈來愈廣泛谆棱,目前,有很多方法來實(shí)現(xiàn)地圖可視化,包括excel的power map包、各種數(shù)據(jù)分析軟件的地圖庫以及在線交互地圖可視化操作工具,如Echarts缺虐、Tableau Public、polyMaps等等礁凡。另外還有一種手段就是通過軟件調(diào)用百度高氮、google或者其他地圖的api,自己DIY可視化地圖顷牌,但是這種辦法需要操作者本身既要對(duì)相關(guān)軟件的編程熟悉剪芍,又要熟悉不同地圖api的具體用法。本文就是用這種手段韧掩,以一個(gè)簡單的表格文件出發(fā)紊浩,在不知道相關(guān)地點(diǎn)經(jīng)緯度的情況下,通過python調(diào)用百度地圖API實(shí)現(xiàn)熱力地圖疗锐,這其中需要申請密鑰坊谁、批量經(jīng)緯度換算、轉(zhuǎn)換成js數(shù)據(jù)滑臊、百度熱力地圖api相關(guān)參數(shù)的調(diào)整等等口芍。

(1)初始數(shù)據(jù):csv格式的數(shù)據(jù)表格

初始數(shù)據(jù)為2017年1月70個(gè)大中城市新建住宅價(jià)格指數(shù)同比值,直接從國家統(tǒng)計(jì)局網(wǎng)站公布的數(shù)據(jù)copy過來(下圖)雇卷,數(shù)據(jù)已整理好鬓椭,為兩列(城市city、房價(jià)指數(shù)price)关划,并保存為csv格式小染。在實(shí)際中,我們常常通過爬取網(wǎng)站上萬條地區(qū)數(shù)據(jù)并存為csv格式來分析贮折,在這里為簡化流程裤翩,初始數(shù)據(jù)來源直接copy已有數(shù)據(jù)。

Paste_Image.png

(2)城市轉(zhuǎn)換成經(jīng)緯度第一步:注冊密鑰
在百度地圖api上相關(guān)位置的展現(xiàn)是以經(jīng)緯度為基礎(chǔ)的(這里暫不介紹百度地圖坐標(biāo)體系與其他地圖的區(qū)別)调榄,如北京踊赠,其經(jīng)度(longitude)為:116.395645今穿,緯度(latitude)為:39.929986伦籍,在這里既需要通過百度的Geocoding API來獲取不同城市的經(jīng)緯度坐標(biāo),又要求將csv數(shù)據(jù)文件導(dǎo)入python,批量獲取這70個(gè)城市的坐標(biāo)信息。在做這些之前,需要注冊百度地圖api(首先你要用百度的賬號(hào))以獲取免費(fèi)的密鑰口注,才能完全使用該api。登錄網(wǎng)址:http://lbsyun.baidu.com/
首頁點(diǎn)擊申請密鑰按鈕,經(jīng)過填寫個(gè)人信息乐导、郵箱注冊等,成功之后在開放平臺(tái)上點(diǎn)擊“創(chuàng)建應(yīng)用”,填寫相關(guān)信息仪媒,在這里特別說明的是蒲牧,在IP白名單框里,如果不清楚自己的IP地址,最好設(shè)置為:0.0.0.0/0遵倦,雖然百度提醒它會(huì)有泄露使用的風(fēng)險(xiǎn)傲绣,但是有時(shí)候你把你自己的IP地址輸進(jìn)去可能也不行续搀。提交后毅往,在你創(chuàng)建應(yīng)用的訪問應(yīng)用(AK)那一欄就是你的密鑰霜大。
(3)城市轉(zhuǎn)換成經(jīng)緯度第二步:構(gòu)造經(jīng)緯度獲取函數(shù)
注冊密鑰后就可以在百度Web服務(wù)API下的Geocoding API接口來獲取你所需要地址的經(jīng)緯度坐標(biāo)并轉(zhuǎn)化為json結(jié)構(gòu)的數(shù)據(jù)途茫,其網(wǎng)址為:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
網(wǎng)頁中有相關(guān)說明,根據(jù)示例URL,采用python3軟件刃麸,寫出如下函數(shù):

import json
from urllib.request import urlopen, quote
import requests,csv
import pandas as pd #導(dǎo)入這些庫后邊都要用到

def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoder/v2/'
    output = 'json'
    ak = '你申請的密鑰***'
    add = quote(address) #由于本文城市變量為中文吁伺,為防止亂碼,先用quote進(jìn)行編碼
    uri = url + '?' + 'address=' + add  + '&output=' + output + '&ak=' + ak
    req = urlopen(uri)
    res = req.read().decode() #將其他編碼的字符串解碼成unicode
    temp = json.loads(res) #對(duì)json數(shù)據(jù)進(jìn)行解析
    return temp 

(4)城市轉(zhuǎn)換成經(jīng)緯度第三步:批量獲取城市經(jīng)緯度坐標(biāo)
在構(gòu)造完獲取坐標(biāo)函數(shù)后割去,我們就需要用python讀取csv文件的數(shù)據(jù)宦搬,并將city列單獨(dú)讀出來劫拗,批量獲取經(jīng)度矾克、緯度坐標(biāo),并生成json的數(shù)據(jù)文件弓候,其代碼如下:

file = open(r'E:\\爬蟲數(shù)據(jù)分析\調(diào)用百度地圖api\point.json','w') #建立json數(shù)據(jù)文件
with open(r'E:\\爬蟲數(shù)據(jù)分析\調(diào)用百度地圖api\各區(qū)域房價(jià).csv', 'r') as csvfile: #打開csv
    reader = csv.reader(csvfile)
    for line in reader: #讀取csv里的數(shù)據(jù)
        # 忽略第一行
        if reader.line_num == 1: #由于第一行為變量名稱,故忽略掉
            continue
            # line是個(gè)list,取得所有需要的值
        b = line[0].strip() #將第一列city讀取出來并清除不需要字符
        c= line[1].strip()#將第二列price讀取出來并清除不需要字符
        lng = getlnglat(b)['result']['location']['lng'] #采用構(gòu)造的函數(shù)來獲取經(jīng)度
        lat = getlnglat(b)['result']['location']['lat'] #獲取緯度
        str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'
        #print(str_temp) #也可以通過打印出來姐扮,把數(shù)據(jù)copy到百度熱力地圖api的相應(yīng)位置上
        file.write(str_temp) #寫入文檔
file.close() #保存

在這里特別要注意str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'絮供,這一行的命令,這是參照百度地圖JavaScript API熱力圖制作的相應(yīng)格式而生成的睡榆,生成的json數(shù)據(jù)格式為:{"lat":39.92998577808024,"lng":116.39564503787867,"count":124.7},如下圖所示萍肆,來自于網(wǎng)址:http://developer.baidu.com/map/jsdemo.htm#c1_15

Paste_Image.png

(5)生成熱力地圖
接下來就比較簡單胀屿,我們先建立一個(gè)html文件塘揣,將http://developer.baidu.com/map/jsdemo.htm#c1_15
網(wǎng)址中源代碼復(fù)制過來,首先將代碼中的ak換成你自己的密鑰宿崭;

Paste_Image.png

然后將生成的point.json文件里的數(shù)據(jù)復(fù)制出來亲铡,在替換掉var points =[ ]里的內(nèi)容,即可葡兑。這里要注意的是奖蔓,由于百度地圖JavaScript API熱力圖默認(rèn)的是以天安門為中心的北京區(qū)域地圖,而我們的數(shù)據(jù)是全國性的讹堤,所以這里還需要對(duì)熱力圖中“設(shè)置中心點(diǎn)坐標(biāo)和地圖級(jí)別”的部分進(jìn)行修改(見下圖)吆鹤,具體設(shè)置可以參考百度創(chuàng)建地圖api中:
http://api.map.baidu.com/lbsapi/creatmap/
自己可以去調(diào)試出合適的中心點(diǎn)與地圖級(jí)別。
Paste_Image.png

最后洲守,由于我們的大部分price數(shù)據(jù)(也就是points里的count)都超過了100(默認(rèn)最大為100)疑务,還需要對(duì)熱點(diǎn)圖代碼中的點(diǎn)最大值進(jìn)行設(shè)定(這里設(shè)為140)。
Paste_Image.png

保存后梗醇,用瀏覽器打開知允,即得到了2017年1月70個(gè)大中城市新建住宅價(jià)格指數(shù)同比的熱力地圖
Paste_Image.png

圖形可以看出,2017年1月房價(jià)上漲的熱點(diǎn)地區(qū)主要是合肥叙谨、南京温鸽、杭州一帶,福州手负、廈門一帶以及廣州一帶涤垫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虫溜,隨后出現(xiàn)的幾起案子雹姊,更是在濱河造成了極大的恐慌,老刑警劉巖衡楞,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吱雏,死亡現(xiàn)場離奇詭異敦姻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)歧杏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門镰惦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犬绒,你說我怎么就攤上這事旺入。” “怎么了凯力?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵茵瘾,是天一觀的道長。 經(jīng)常有香客問我咐鹤,道長拗秘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任祈惶,我火速辦了婚禮雕旨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捧请。我一直安慰自己凡涩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布疹蛉。 她就那樣靜靜地躺著活箕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪可款。 梳的紋絲不亂的頭發(fā)上讹蘑,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音筑舅,去河邊找鬼。 笑死陨舱,一個(gè)胖子當(dāng)著我的面吹牛翠拣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播游盲,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼误墓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了益缎?” 一聲冷哼從身側(cè)響起谜慌,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莺奔,沒想到半個(gè)月后欣范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年恼琼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妨蛹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴竞,死狀恐怖蛙卤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情噩死,我是刑警寧澤颤难,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站已维,受9級(jí)特大地震影響行嗤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衣摩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一昂验、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艾扮,春花似錦既琴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酌予,卻和暖如春磺箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抛虫。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工松靡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人建椰。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓雕欺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棉姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屠列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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