Algoritmo per la mappa di calore?
Domanda
Ho una lista di valori ciascuno con latitudine e longitudine. Sto cercando di creare un'immagine heatmap traslucida di sovrapporre su Google Maps. So che ci sono soluzioni lato server e basato su flash già, ma voglio costruire questo in javascript utilizzando il tag canvas.
Tuttavia, non riesco a trovare una breve descrizione dell'algoritmo utilizzato per trasformare le coordinate e valori in un heatmap. Qualcuno può fornire o un link a uno?
Grazie.
Nessuna soluzione corretta
Altri suggerimenti
L'idea di base sarebbe quella di creare una griglia e proiettare ogni lat, lng coord a quella griglia. Vorrei usare una matrice 2D di int.
La pseudo-codice sarebbe:
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
Quindi, l'idea è che più alto è il valore int, il più caldo quella cella è. increment_adjacent_cells dovrebbero incrementare i valori di tutte 8 celle adiacenti.
Ho cercato di risolvere questo in JavaScript utilizzando l'elemento canvas, ecco il mio risultato corrente:
Devo fissare il filtro gaussiano e la mappatura dei colori, perché non dà buoni risultati al momento.
Guardate questo progetto, se siete alla ricerca di qualcosa che assomiglia di più 'tempo mappe tv':
Un modo più veloce di costruire una mappa termica potrebbe essere quella di utilizzare una coda:
Pseudocodice:
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)
}
Questo consente di risparmiare sulle tonnellate di iterazioni!