调用百度地图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数据即可。注意网页源码中有半径点的设置和最大值。这个根据自己的数据需求去设置,制作出自己理想的热力图。

猜你喜欢

转载自blog.csdn.net/qq_25174673/article/details/84308529