Generazione di un heatmap KML da data set di dati di [lat, lon, la densità]

StackOverflow https://stackoverflow.com/questions/2389623

  •  24-09-2019
  •  | 
  •  

Domanda

Cerco di costruire uno statico KML (markup Google Earth) di file che mostra un rendering heatmap stile di alcune date insiemi di dati in forma di [lat, lon, densità] tuple.

set

A dati molto semplici che ho è per densità di popolazione.

I miei requisiti sono:

  • deve essere in grado di nutrire nei dati per un determinato lat, lon
  • deve essere in grado di specificare la densità dei dati in quel lat, lon
  • Deve esportare KML

I requisiti sono agnostico lingua per questo progetto come sarò generare questi file non in linea al fine di costruire il KML utilizzato altrove.

Ho guardato alcuni progetti, in particolare heatmap.py , che è un porto di < a href = "http://code.google.com/p/gheat/" rel = "nofollow noreferrer"> gheat in Python con KML esportazione. Ho colpito un muro di mattoni, nel senso che i progetti che ho trovato fino ad oggi tutti si basano sulla costruzione della heatmap dalla densità di [lat, lon] punti immessi nel algoritmo.

Se mi manca un modo ovvio per adattare il mio insieme di dati ad immettere in rete solo il [lat, lon] tuple, ma la regolazione come li do da mangiare utilizzando i valori di densità che ho, mi piacerebbe sapere!

È stato utile?

Soluzione

Ehi Will, heatmap.py sono io. La vostra richiesta è un comune abbastanza ed è sulla mia lista di cose da indirizzo. Io non sono molto sicuro ancora come farlo in modo generale; nel gergo heatmap.py, sarebbe semplice per avere un dotsize per-punto, invece di un dotsize globale come è ora, ma non sono sicuro che affronterà la vera necessità. Sto puntando per un rilascio estate 2010, ma probabilmente si potrebbe fare questo mod da soli.

Si può provare a cercare strumenti Kernel Density Estimator ; questo è quello che gli statistici chiamano heatmaps. R ha alcuni buoni strumenti integrati è possibile utilizzare che potrebbero soddisfare il vostro bisogno più rapidamente.

buona fortuna!

Altri suggerimenti

Credo che un modo per farlo è quello di creare una (più grande) lista di tuple con ogni punto ripetuti in base alla densità in quel punto. Un punto con una elevata densità è rappresentata da un sacco di punti uno sopra l'altro, mentre un punto con una bassa densità ha pochi punti. Così, invece di: [(120.7, 82.5, 2), (130.6, 81.5, 1)] usereste [(120.7, 82.5), (120.7, 82.5), (130.6, 81.5)] (un insieme di dati abbastanza noiosa).

Un problema possibile è che i vostri densità può ben essere carri, non interi, così si dovrebbe normalizzare e intorno ai dati. Un modo per fare la conversione è qualcosa di simile:

def dens2points (dens_tups):
    min_dens = dens_tups[0][2]
    for tup in dens_tups:
        if (min_dens > tup[2]):
           min_dens = tup[2]
    print min_dens

    result = []
    for tup in dens_tups:
        for i in range(int(tup[2]/min_dens)):
            result.append((tup[0],tup[1]))
    return result

if __name__ == "__main__":
    input = [(10, 10, 20.0),(5, 5, 10.0),(10,10,0.9)]
    output = dens2points(input)
    print input
    print output

(che non è molto divinatorio, ma sembra funzionare per il semplice caso di test). Questa subroutine dovrebbe convertire i dati in una forma che è accettato da heatmap.py. Con un piccolo sforzo credo che la subroutine può essere ridotto a due righe.

Ho aggiornato lo script heatmap.py modo è possibile specificare una densità per ogni punto. I caricato le mie modifiche al mio blog . Non sono sicuro se lo farà esattamente quello che vuoi però!

Saluti, Alex

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