Algoritmo para el mapa de calor?
Pregunta
Tengo una lista de los valores de cada uno con la latitud y longitud. Estoy mirando para crear una imagen de mapa de calor translúcida de la superposición en Google Maps. Sé que hay del lado del servidor y parpadean las soluciones basadas ya, pero quiero construir esto en JavaScript utilizando la etiqueta de la lona.
Sin embargo, me parece que no puede encontrar una descripción concisa del algoritmo utilizado para convertir las coordenadas y valores en un mapa de calor. ¿Alguien puede disponer o enlazar con uno?
Gracias.
No hay solución correcta
Otros consejos
La idea básica sería la creación de una red y proyectar cada lat, coord GNL a la red. Me gustaría utilizar una matriz 2D de enteros.
El pseudo-código sería:
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
Por lo tanto, la idea es que cuanto mayor sea el valor int, más caliente que la célula es. increment_adjacent_cells deberían incrementar los valores en los 8 células adyacentes.
Me han tratado de resolver esto en JavaScript utilizando el elemento canvas, aquí está mi resultado actual:
Tengo que fijar el filtro gaussiano y la asignación de colores, ya que no da buenos resultados actualmente.
Mira a este proyecto, si está buscando algo que se parece más 'tiempo de la tv mapas':
Una manera más rápida de construir un mapa de calor podría ser el uso de una cola:
Pseudocódigo:
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)
}
Esto ahorra toneladas de iteraciones!