关于热力图的绘制问题

 

关于地理热力图的绘制,我觉得很炫酷。在这里我使用了两种方法:结合python和百度地图api的方法;使用python的folium的方法。

(1)结合python和百度地图api的方法

1. 进入网站:http://lbsyun.baidu.com/,选择控制台。

2.选择创建应用

关于热力图的绘制问题_第1张图片

3. 获取密钥

关于热力图的绘制问题_第2张图片

4. 再转到网址:http://lbsyun.baidu.com/jsdemo.htm#c1_15 ,百度地图api示例

关于热力图的绘制问题_第3张图片

关于热力图的样例代码:




   
   
   
   
    热力图功能示例
        


    


    

        
    


关于var point[]内部数据的形式是字典,字典中第一个元素是经度,第二个元素是纬度,第三个是数值大小。

所以我们需要将数据转换成可视化的图形,在这里我们用python来获取经纬度和转换数据形式。

核心函数如下:

def get_Lnglat(addresses):
    for address in addresses:
        url='http://api.map.baidu.com/geocoder?key=f247cdb592eb43ebac6ccd27f796e2d2&output=json&address='+str(address)
        r=requests.get(url,headers=header)
        time.sleep(1)
        answer=r.json()
        # 获取纬度
        lng = float(answer['result']['location']['lng'])
        print(address)
        # 获取经度
        lat = float(answer['result']['location']['lat'])
        print(lng)
        dict="{'lng':"+str(lng)+",'lat':"+str(lat)+",'count':"+str(count)+"},"
    return dict

将获取的数据转换并添加到var point[]中,再用之前获取的密钥加到这里

关于热力图的绘制问题_第4张图片

再运行代码,则有

关于热力图的绘制问题_第5张图片

 

(2)使用python的folium的方法

在这里使用之前获取的数据源,文件格式这样:

关于热力图的绘制问题_第6张图片

代码:
#!/usr/bin/env python3
#!coding=utf-8

import pandas as pd
import numpy as np
import folium
from folium.plugins import HeatMap
import webbrowser

df_1=pd.read_csv(r'F:\python\数据\全国省市经纬度信息.csv',engine='python',encoding='utf-8')
lng,lat,values=np.array(df_1['lng']),np.array(df_1['lat']),np.array(df_1['value'])
data=[[lat[i],lng[i],values[i]] for i in range(len(df_1['address']))]
map_osm = folium.Map(location=[35,110],zoom_start=2)
HeatMap(data).add_to(map_osm)
file_path = r"F:\python\数据\photo.html"
map_osm.save(file_path)   #保存本地
webbrowser.open(file_path) #在本地浏览器打开

效果图:

关于热力图的绘制问题_第7张图片

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python)