我有一个7130值的列表,从0到1,这些值代表城市地图上相应GPS坐标的“热值”,我可以从数据文件中提取坐标。现在我想用python生成一张热图,就像这里显示的图片一样。有谁知道这是怎么做到的吗?非常感谢你
答案 0 :(得分:3)
回答这个问题有很多细节。
第一个是,到目前为止你有什么?
你有地图图片吗?
您是否绘制了gps坐标以与图像中的像素位置重合?
你有一个查找表,以对应你的不同" temp"值?
您是要创建静态输出图像,还是希望动态更新? (这可能会决定您用于生成热图叠加的方法。)
一旦你了解了这些细节,使用Python中可用的各种成像库(PIL / OpenCV)生成如上图所示的热图应该相当简单。
这是一个粗略(过于简化)的概述,说明如何使用OpenCV从初始数据生成热图:
我将从两个图像开始,即地图图像和相同大小的零值(黑色)图像。然后,您可以在gps /像素位置为空白图像的所有三个颜色通道添加适当的值,这将为您提供3通道灰色图像。 (因此,如果值为0.25,则将RG和B设置为0.25)
然后,应用具有大内核大小的高斯模糊;适合您在点和图像大小之间所需的混合量。
在模糊后,您可能需要将模糊图像乘以某个因子(取决于内核大小)以使颜色变亮
接下来,将查找表应用于模糊映射值:
然后,您可以使用任意数量的组合(add,multiply,addWeighted()等)将两个图像合并为一个输出图像。或者,如果您想要使用Alpha通道进行更清晰的叠加,您可以使用here所述的方法
答案 1 :(得分:1)
这是一个很棒的图书馆HEATMAP。
代码段:
import heatmap
import random
pts = []
for x in range(400):
pts.append((random.random(), random.random() ))
print "Processing %d points..." % len(pts)
hm = heatmap.Heatmap()
img = hm.heatmap(pts)
img.save("classic.png")
答案 2 :(得分:0)
如果使用PYTHON语言,则有很短的方法。您只需要安装一个gmaps
库。您需要一个Google Map Key才能使用此库。
库的链接:https://jupyter-gmaps.readthedocs.io/en/stable/tutorial.html#weighted-heatmaps
这里是一个例子:
import gmaps
import gmaps.datasets
from ipywidgets.embed import embed_minimal_html
import pandas as pd
columns = ["latitude","longitude","magnitude"]
a = []
for i in your_arr:
a.append([your_arr[0], your_arr[1], your_arr[2]])
df = pd.DataFrame(a,columns=columns)
gmaps.configure(api_key="YOUR_GOOGLE_MAPS_API_KEY_HERE")
fig = gmaps.figure()
heatmap_layer = gmaps.heatmap_layer(
df[['latitude', 'longitude']], weights=df['magnitude'],max_intensity=210,point_radius=30
)
fig.add_layer(heatmap_layer)
embed_minimal_html('export.html', views=[fig])
之后,您可以在浏览器中打开export.html
,并可以轻松查看热图:)