python:具有GPS坐标和相应的值,生成2D热图

时间:2015-03-09 21:30:30

标签: python gps heatmap

我有一个7130值的列表,从0到1,这些值代表城市地图上相应GPS坐标的“热值”,我可以从数据文件中提取坐标。现在我想用python生成一张热图,就像这里显示的图片一样。有谁知道这是怎么做到的吗?非常感谢你

enter image description here

3 个答案:

答案 0 :(得分:3)

回答这个问题有很多细节。

第一个是,到目前为止你有什么?

你有地图图片吗?

您是否绘制了gps坐标以与图像中的像素位置重合?

你有一个查找表,以对应你的不同" temp"值?

您是要创建静态输出图像,还是希望动态更新? (这可能会决定您用于生成热图叠加的方法。)

一旦你了解了这些细节,使用Python中可用的各种成像库(PIL / OpenCV)生成如上图所示的热图应该相当简单。

这是一个粗略(过于简化)的概述,说明如何使用OpenCV从初始数据生成热图:
我将从两个图像开始,即地图图像和相同大小的零值(黑色)图像。然后,您可以在gps /像素位置为空白图像的所有三个颜色通道添加适当的值,这将为您提供3通道灰色图像。 (因此,如果值为0.25,则将RG和B设置为0.25) Initial Map image Initial 3 channel gray value map

然后,应用具有大内核大小的高斯模糊;适合您在点和图像大小之间所需的混合量。
Blurred value map
在模糊后,您可能需要将模糊图像乘以某个因子(取决于内核大小)以使颜色变亮 Multiplied Blurred value map

接下来,将查找表应用于模糊映射值:
Value map with LUT

然后,您可以使用任意数量的组合(add,multiply,addWeighted()等)将两个图像合并为一个输出图像。或者,如果您想要使用Alpha通道进行更清晰的叠加,您可以使用here所述的方法 Final Heat map

答案 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")

Result image

答案 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])

这里是什么样子: enter image description here

之后,您可以在浏览器中打开export.html,并可以轻松查看热图:)