呼叫百度地圖API介面製作熱力圖
阿新 • • 發佈:2018-12-31
呼叫百度地圖API介面製作熱力圖
Python學了很久,也做了一些機器學習的demo,利用matolotlib庫做過一些視覺化。今天呢想嘗試做一下熱力圖。先PO一張我最終效果圖。
因為資料原因,效果一般,但我們的目的還是達到了。下面就講一下大致流程。
1、資料準備
我沒有上千個CSV資料,一個CSV資料就代表一輛車一天內的情況。我們要做的就是這幾千輛車某一天某一個時間段在地圖上的熱力圖。所以我們對每個表都要根據某個特定的時間去獲取經緯度和速度,所以每個CSV我們都要獲取M,N,O,P這四列元素。我們把所有的CSV資料放在一個名為十月份資料的資料夾下面,這樣子我們可以迴圈獲取每個CSV檔案,再對單個CSV檔案解析獲取我們要的資訊寫入一個單獨的表內。
Python程式碼如下:
import csv import os plot_time = [] for i in range(0,10): plot_time.append( '2018-10-10'+ ' '+'20:00:0'+str(i))#自己設定需要的日期,注意格式要按照這樣 for i in range(10,60): plot_time.append( '2018-10-10'+ ' '+'20:00:'+str(i))#自己設定需要的日期,注意格式要按照這樣 outputname = category+'_'+'2018-10-10-2000' #輸出檔名 csv_file = open(outputname+'.csv','w',newline='',encoding='utf-8-sig')#建立csv總表 for csvfile in os.listdir('十月份資料/'): with open('十月份資料/'+csvfile,'r') as f: k = 0 reader = csv.reader(f) for line in reader: if k > 60: break else: if line[12] in plot_time: info = [] time = line[12] lng = line[13].strip() lat = line[14].strip() speed = float(line[15].strip()) info.append(time) info.append(lng) info.append(lat) info.append(speed) writer = csv.writer(csv_file) writer.writerow(info) k += 1 csv_file.close()
2、註冊金鑰
我們需要把資料匯入到百度API介面中才能實現熱力圖的製作,那麼我們該匯入什麼樣格式的資料呢。所以我們得先申請API介面,去觀察它的原始碼需要怎樣的資料。
首先開啟網址http://lbsyun.baidu.com/註冊一個帳號。然後點選 控制檯->建立應用,根據網頁提示設定相關資訊。提交之後會有一個應用AK,這是我們需要儲存的。找到百度地圖APIhttp://lbsyun.baidu.com/jsdemo.htm#c1_15。從原始碼中我們可以看出熱力圖需要的資料格式是JSON格式。那麼我們就通過python讀取總表的資料生成json資料然後放入原始碼中。
Python程式碼如下:
import csv
file = open('2018-10-10-184230.json','w',encoding='UTF-8') #建立json資料檔案
with open('2018-10-10-184230.csv','r',encoding='UTF-8') as f:
reader = csv.reader(f)
for line in reader:
if reader.line_num == 1:
continue
lng = line[1].strip()
lat = line[2].strip()
c = line[3].strip()
str_temp = '{"lng":' + str(lng) + ',"lat":' + str(lat) + ',"count":' + str(c) + '},'
# print(str_temp) #也可以通過打印出來,把資料copy到百度熱力地圖api的相應位置上
file.write(str_temp) # 寫入文件
file.close() # 儲存
最後替換網頁原始碼中的json資料即可。注意網頁原始碼中有半徑點的設定和最大值。這個根據自己的資料需求去設定,製作出自己理想的熱力圖。