Creazione di una "mappa di calore" basata su polilinea da tracce GPS?


30

Quest'inverno sto pianificando di seguire le mie piste da sci / snowboard utilizzando un GPS. Gran parte della mia guida avverrà nello stesso resort. Vorrei essere in grado di creare una sorta di "mappa di calore" che mostra la quantità di corse che ho effettuato in una determinata area. Mentre aggiungo sempre più tracce GPS al mio database, il mio obiettivo sarebbe quello di vedere una sorta di mappa di calore lineare delle aree più percorse. Data la natura dello sci alpino, ti aspetteresti che le linee di seggiovia in salita saranno le "più calde" perché saranno gli unici luoghi visitati più e più volte.

Dato che 1) la mia traccia non sarà sempre la stessa e 2) l'area coperta seguendo una "corsa" potrebbe essere larga qualche centinaio di metri, quale potrebbe essere il modo migliore per analizzare questi dati "lineari" per creare una sorta di heatmap? Il mio pensiero era quello di bufferizzare le linee, quindi intersecare i polis per ottenere una sorta di cosa del diagramma di Venn. La mia preferenza è usare tecnologie open source. Ho QGIS e PostGIS caricati e disponibili.

AGGIORNAMENTO : Per quanto riguarda la risposta di @ blah238, stavo pensando a qualcosa che potrebbe essere in grado di "raccogliere" il numero di passaggi ("corse") attraverso un'area e quindi simboleggiare il conteggio. Concettualmente, questo sarebbe simile a " Raccogli eventi " di ArcGIS (ma per linee, non punti) o Comprimi linee doppie su linea centrale (ma per linee multiple approssimativamente nella stessa area).

Un esempio più visivo di un concetto simile potrebbe essere una mappa del flusso di traffico, in cui aree altamente congestionate equivarrebbero a piste / aree "fortemente percorse":

Google Traffic Map

Ho letto le seguenti domande che possono dare alcune idee, ma in realtà non affrontano ciò che sto cercando di realizzare:

Traiettorie di clustering (dati GPS di punti (x, y)) e mining dei dati

Gestione degli errori con le rotte GPS (framework teorico?)


Supponendo che si utilizzerebbero i dati GPX, dovrebbe solo prendere letture lat / long a intervalli, quindi dovrebbe essere già nelle funzionalità punto. Non saresti in grado di utilizzare una mappa di calore su questo? Oppure non stai utilizzando un dispositivo compatibile con GPX ??
RomaH,

Ah Ho letto male quello che volevi .. Non importa.
RomaH,

@RomaH, in realtà, potresti essere molto interessato a qualcosa con la tua idea di usare i punti per generare una mappa di calore invece di usare le linee. Non avevo mai preso in considerazione l'utilizzo dei punti di origine prima, quindi è qualcosa che esaminerò sicuramente.
Ryan Dalton,

Hai a che fare con un campo, dove una strada ha bordi ben definiti. Se si desidera eseguire un modello di linea, è possibile eseguire diversi poli overlay, join e utilizzare il plug-in point2one per creare una mappa di linee con valori ereditati. Ma poi devi decidere quanto lontano è necessario sciare per giustificare una nuova funzionalità di linea. Personalmente per me sarei felice con una soluzione a mappe di calore, ma ancora una volta non sono consapevole delle tue esigenze.
RomaH,

Mi sono imbattuto in questa domanda che è un modo molto interessante per ottenere essenzialmente la stessa cosa, ma usando i punti di tracciamento GPS per creare la mappa di calore.
Ryan Dalton,

Risposte:


17

Ho lavorato un po 'su questo in GeoTools / GeoServer estendendo la trasformazione del rendering Heatmap per supportare geometrie diverse dai punti.

Mappa termica delle consegne di pizza

Non è ancora finito, ma è possibile ottenere il ramo delle funzionalità dal mio repository su GitHub .

Lo screenshot è delle tracce GPS di quando ho lavorato come autista di consegna di pizza.


Non sta ancora producendo geometrie vettoriali, ma sta raccogliendo sovrapposizioni per dare un valore più elevato.
smithkm,

qualche idea su come ottenere questo effetto solo con i postgis? o qgis?
chrismarx,

15

Ecco un buon tutorial per fare esattamente questo usando MapBox e TileMill :

Immagine dello schermo


1
D'accordo, questo concetto è quasi identico e potrebbe essere facilmente realizzato in qualsiasi GIS. Ma questo suggerisce fondamentalmente "rendi tutte le tue tracce rosse con un buffer verde chiaro" e si distingueranno sulla mappa? Per effetto visivo, lavorerò sicuramente. Immagino che inizialmente stavo pensando di provare qualcosa di più "analitico" che potesse mostrare "conteggi" di "percorsi" in questo esempio. Continuerò a rimuginare.
Ryan Dalton,

@ blah238 Stavo guardando un esempio simile ... grazie mille !!
Sunil,

1
@ blah238, dopo averci pensato un po 'di più, hai fornito una risposta molto valida alla mia domanda iniziale. Avrei dovuto essere più chiaro sui miei pensieri. Grazie per la tua risposta e ho aggiornato la mia domanda per riflettere più accuratamente ciò che stavo cercando di ottenere. Apprezzo l'aiuto.
Ryan Dalton,

5

ecco il mio approccio semplice:

  1. creare una nuova mappa in umap: http://umap.openstreetmap.fr/en
  2. fai clic su Importa dati a seleziona tutti i file gpx che hai e caricali nella mappa (puoi importarli tutti in una volta)
  3. entra Modifica impostazioni mappa> Proprietà predefinite, scegli opacità 0,25, peso 10.

I tre passaggi precedenti richiederanno 5 minuti ed ecco il risultato: inserisci qui la descrizione dell'immagine


3

Ecco il mio approccio su QGIS. Questo era per una serie di linee di autobus e volevo identificare quali strade avevano il maggior numero di linee di autobus che passavano.

  • Ho usato il plugin Qchainage per convertire le mie linee in punti. Ho testato diversi scenari fino a quando non ho prodotto molti punti per riga (1.500 per riga e le linee erano circa 9 km).
  • Applicato il rendering della simbologia della mappa di calore che Qgis ha incorporato nella scheda stile. proprietà layer> stile> mappa di calore
  • Gioca con il raggio e il valore massimo. Assicurati di selezionare la migliore qualità di rendering.
  • Creata una nuova scala di colori (scegli continua) partendo dal nero e da qualsiasi altro colore brillante sull'altro lato.

E voilà.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


2

Mi rendo conto che questo è un post piuttosto vecchio, tuttavia, mi sono imbattuto in ricerche simili. Ho sviluppato un modello / flusso di lavoro piuttosto semplice che può realizzare proprio questo in ArcGIS (forse QGIS, ma non l'ho ancora implementato lì).

Se si dispone di un file GPX o TCX specifico (qualsiasi file di punti funziona comunque), può essere semplicemente aperto in Excel, quindi convertito in CSV e portato in ArcGIS. Utilizzando lo Points to Linestrumento, converti i punti GPS dal CSV in traiettorie ordinando i punti in base al tempo (puoi anche raggrupparli utilizzando un identificatore univoco, che in questo caso potrebbe essere in base al resort, al percorso o alla data specifica dell'evento - ad es. Giorno 1, 2, ecc.). Questo creerà un singolo livello di polilinea (a meno che non li raggruppi per l'ID univoco). Quindi si utilizza lo Split Line at Verticesstrumento che crea segmenti di linea tra ciascun punto successivo. Da lì, si utilizza lo Line Densitystrumento che conta il numero di linee che attraversano una cella in base alle dimensioni della cella e al raggio di ricerca specificati e genera un raster. Questo raster può essere simbolizzato come una mappa di calore.

Ho, e continuo ad implementarlo frequentemente, e ho incluso un risultato di esempio di seguito:

inserisci qui la descrizione dell'immagine


Sembra una tecnica davvero interessante. Non ho mai completato questa idea, quindi lo esaminerò ulteriormente. Grazie per aver risposto a una vecchia domanda!
Ryan Dalton,

Nessun problema! È un modello piuttosto semplice che utilizza solo quei tre strumenti della Arc Toolbox. In alternativa, potresti semplificarlo ulteriormente a due strumenti usando solo Track Intervals to Linegli Line Densitystrumenti e
andrew-ryan,

1

Il nostro uso di questo comporta il routing degli studenti nella loro scuola usando PGRouting.

I risultati di un singolo percorso sono al centro un insieme di nodi (che vengono trasformati in linee unendo facoltativamente i bordi correlati).

Se instrada più studenti verso una singola scuola, la raccolta di output dei nodi può quindi essere visualizzata in QGIS usando il renderizzatore di mappe di calore, che mostra gli "hotspot" dei percorsi raccolti verso la scuola (vedi sotto).

Queste mappe sono state utilizzate per informare le aree che dovrebbero essere prese di mira per ulteriori infrastrutture di sicurezza come incroci, segnali, cartelli, ecc.

inserisci qui la descrizione dell'immagine


Grazie per la condivisione dell'immagine, mi piace. Proverò a elaborare i vertici GPX anziché le linee per vedere se gli hotspot funzionano in un piccolo
RyanDalton

0

Crea una griglia reticolare, converti gpsdata in shapefile, poligonizza le linee, estrae i dati dei punti x, y dalle tabelle, crea una densità di superficie o mappa termica usando la pratica standard a questo punto. È quindi possibile unire i dati vettoriali lineari per ottenere valori di pixel in una visualizzazione raster o per un'ulteriore elaborazione numerica.


0

Molte persone (incluso me stesso) guardano un file GPX e lo considerano come una sequenza di posizioni (punti), mentre invece può essere perfettamente visto come una sequenza di segmenti di linea .

La tua formulazione del problema implica una "mappa di calore" in modo da poter ispezionare visivamente le tue traiettorie, quindi esiste un modo piuttosto semplice per saltare la complessa parte di scricchiolio dei numeri delegandola direttamente a un motore di stampa.

Quando dici "buffer le linee", quello sarebbe lo spessore della linea. Quando dici "colleziona i passaggi", ciò significherebbe tracciare ripetutamente con linee trasparenti , in tal modo "costruendo" sempre più colore.

Quindi, ti suggerisco di tracciare ogni traiettoria come una singola polilinea con uno spessore sufficiente a creare una sovrapposizione (dipende dallo zoom, quindi ti consigliamo di impostare lo spessore in distanza della mappa anziché pixel) e con un'opacità piuttosto bassa , diciamo, 0,05, in nero.

È importante non tracciare ogni segmento, perché se lo fai, le loro estremità si sovrapporranno, raddoppiando la loro opacità e creando un "punto" di colore più forte.

Alla fine, otterrai un'immagine in scala di grigi su cui puoi applicare la mappa colori di tua scelta.

Probabilmente lo farei usando Python / Cairo, ma Python / Matplotlib lo farebbe, e Html / Canvas o Html / SVG (o SVG programmatico) sicuramente lo farebbero.

Il risultato finale dipenderà solo dalla risoluzione del supporto di output.


0

Sono consapevole che questa è una domanda piuttosto vecchia, ma poiché questo post è uno dei migliori risultati di ricerca per questo argomento, ho pensato di pubblicare un link a un flusso di lavoro per la produzione di mappe di calore della polilinea in ArcGIS che risponde a questa domanda, poiché al momento non esiste una soluzione per ArcGIS in questo post.

https://luke-webber.github.io/polyline-heatmap/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.