1. 程式人生 > >呼叫百度地圖API介面製作熱力圖

呼叫百度地圖API介面製作熱力圖

呼叫百度地圖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資料即可。注意網頁原始碼中有半徑點的設定和最大值。這個根據自己的資料需求去設定,製作出自己理想的熱力圖。