最近需要绘制热力图,下一阶段要做一些数据分析的脚本。
基础:Python3+百度地图API
Part1 原始数据
经纬度数值大约有几百个,统一保存为data.csv文件
Part2 百度API申请
利用百度API,得到一个浏览器端应用的访问AK XjKKSYQ2Dv****************************
Part3 获取HTML源代码
左侧(添加热力图)-(点击运行)-(点击显示热力图) 可见demo中的默认热力图
把该demo代码中“您的密钥” 替换成 刚才申请过的访问AK XjKKSYQ2Dv****************************
有些操作代码的方法是:第一步生成如下标准格式(命名为json_final)
{"lng":116.418261,"lat":39.921984,"count":50},{.....}
第二步保存到json,然后打开json文件,复制所有json内容替换var points 里面的内容(说起来,里面代码的json结果多了一个',',导致调试失败,仔细看才看出来,很好做,利用list[:-1]大法可破
但是我很懒 怎么办
手动把文件input.html中的 var points =[.....] 改成var points =[jsonToBePlaced]
用replace函数把json_final替换掉jsonToBePlaced,point_lon和point_lat替换中心点坐标(116.418261, 39.921984)生成需要的output.html文件
import json,csv
with open(r'data.csv', 'r') as csvfile: #打开csv
reader = csv.reader(csvfile)
stringTemp = ''
for line in reader: #读取csv数据
if reader.line_num == 1: # 忽略第1行
continue
lon = line[0].strip()
lat = line[1].strip()
stringTemp += '{"lng":' + str(lon) + ',"lat":' + str(lat) + ',"count":' + str(25) +'},'
str_final = stringTemp[:-1] # 最后一位多1个',' 切割字符串只取前面的数据
point_lon = str_final.split(',')[0].split(':')[1].strip() # 设置地图默认点的经度
point_lat = str_final.split(',')[1].split(':')[1].strip() # 设置地图默认点的纬度
Part4 其他说明
挨个试了一下这个demo的参数,仅供参考
(1)BMap.Point(116.418261, 39.921984);
中心点坐标,这是以后热力图的默认中心,可以换成自己想要的
我换成了天津老火车站的经纬度
(2)map.centerAndZoom(point, 15);
地图缩放程度默认15,这个值变小,相当于执行缩小操作;值变大,相当于放大操作
我改成了8
(3)heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":20});
每个点半径的大小,默认为20,该值越大,在地图上点覆盖面越大
我改成了8
(4) heatmapOverlay.setDataSet({data:points,max:100});
数量最大值默认为100
由于json里面还要填一个count值,我反复试了一下
count取25,max取30的时候可实现所需效果