我有一个值列表,每个值都有纬度和经度。我正在寻找创建一个半透明的热图图像以覆盖在谷歌地图上。我知道已经有服务器端和基于闪存的解决方案,但我想使用canvas标签在javascript中构建它。
但是,我似乎无法找到用于将坐标和值转换为热图的算法的简明描述。任何人都可以提供或链接到一个吗?
感谢。
答案 0 :(得分:8)
基本思路是创建一个网格并将每个lat,lng coord项目投射到该网格。我会使用一个二维的数组。
伪代码将是:
for each coord
cell = coord projected to grid
increment cell value
end
for 0 to # of passes
for each row
for each col
if grid[row,col] > 0 then
grid[row,col] += 1
increment_adjacent_cells(row, col)
end
end
end
end
因此,我们的想法是,int值越高,单元格越热。 increment_adjacent_cells应该递增所有8个相邻单元格中的值。
答案 1 :(得分:3)
我试图使用canvas元素在javascript中解决这个问题,这是我当前的结果:
我必须修复高斯滤波器和颜色映射,因为它目前没有给出好的结果。
答案 2 :(得分:0)
如果您正在寻找更像“电视天气图”的内容,请查看此项目:
答案 3 :(得分:0)
构建热图的更快方法是使用队列:
伪代码:
Add an element to queue (first in heatmap(x,y, val))
While (!queue.isEmpty())
{
elem = queue.pop()
queue.push(elem.x + 1, elem.y, val-1)
queue.push(elem.x - 1, elem.y, val-1)
queue.push(elem.x, elem.y + 1, val-1)
queue.push(elem.x, elem.y - 1, val-1)
}
这样可以节省大量迭代!