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:

http://gist.github.com/346165

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':

https://github.com/optimisme/javascript-temperatureMap

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top