2015-11-08 14 views
6

Desidero creare un'applicazione Web in cui un utente immette un set di identificatori e viene visualizzato un set di punti su una mappa correlata a tali identificatori.Modifica del cluster di marker in base al livello di zoom in Shiny/Leaflet/R

Il problema è che questi dati possono essere numerati da decine a centinaia di migliaia a addirittura potenzialmente milioni. Data questa possibilità, voglio prendere una leggera virata. Di seguito è riportato il mio comportamento di aggregazione ideale.

A livelli di zoom bassi, voglio aggregare questi punti in conteggi per stato (dimensione simbologia appropriata/colore che indica intensità maggiore, con il punto centrato sul centroide di stato). a livelli di zoom leggermente più alti, questi sarebbero separati in conteggi da poligoni più piccoli. con zoom ancora più elevato, ma con poligoni più piccoli. Quando, se non è aggregato, il numero di punti sulla mappa sarà inferiore a ~ 500, quindi traccia i punti.

Questi poligoni erano già stati decisi e ogni punto ha nei propri dati l'ID poligono per ciascun poligono in cui si trova.

Poiché i punti sono tracciati casualmente all'interno dei rispettivi poligoni, la distribuzione effettiva dei punti all'interno dei poligoni non ha importanza. O meglio, qualsiasi aggregazione che ignori in quale poligono sono stati tracciati i punti cancellerà le informazioni. Per questo motivo, non posso usare markercluster (almeno non con le opzioni che ho visto. Se c'è un modo semplice per aggregare nel modo che sto cercando, per favore fatemelo sapere)

Per vari motivi (I Non sono un programmatore javascript, sono un programmatore R) Sto lavorando all'interno dei limiti del pacchetto opuscolo all'interno di R. C'è un mezzo con cui posso modificare il livello di aggregazione in base allo zoom in questo modo?

Ho messo insieme un set di dati giocattolo contenente un sottoinsieme relativamente piccolo (1 entità, 3 stati, ~ 10k osservazioni) insieme ai centroidi per i tratti di censimento e le contee per quegli stati.

http://s000.tinyupload.com/index.php?file_id=00048836337627834343

+2

c'è già l'opzione di cluster per zoom, se utente 'cluster = clusterOptions()'. Stai cercando di fare di più? – jenesaisquoi

+0

Sì ... Come spiegato nel paragrafo 5, non posso utilizzare il cluster esistente con lo zoom perché cancella/ignora i confini del poligono. Su quale poligono è caduto un punto particolare è davvero tutto ciò che conta ...Cancellare questi limiti, o raggruppare i punti che sono caduti l'uno vicino all'altro per caso è un comportamento indesiderato. – Faydey

+0

Potresti fornire un set di dati giocattolo con alcuni punti in modo che possiamo giocare? – NicE

risposta

1

Questo non è esattamente una risposta ma sarebbe difficilmente in forma in un commento.

Si desidera visualizzare dati aggregati (conteggi di punti/indicatori?) Per aree geografiche predefinite, con quelle aree che si uniscono a livelli di zoom inferiori (diciamo che potrebbe essere per città, quindi contee, Stati, ecc.).

Anche in JavaScript non sono a conoscenza di alcuna soluzione pronta all'uso per questo caso d'uso. Esistono alcuni possibili soluzioni alternative, ma non sono sicuro che siano facilmente eseguibili in R.

Una soluzione normale consiste nell'eliminare qualsiasi cluster automatico e generare i propri indicatori a ogni livello di zoom, con dati appropriati algoritmo di aggregazione (non molto difficile da fare poiché puoi fare affidamento sull'ID poligonale genitore). Quindi aggiungi/rimuovi i marker quando lo zoom cambia.

Sfortunatamente questo significa che non otterrete le animazioni e la visualizzazione della copertura da MarkerCluster.

Questa thread potrebbe anche interessare [Question] Build clusters depending on some geographical entity #521 dalla pagina di problemi di Leaflet.markercluster su GitHub. Il caso d'uso è in qualche modo simile, e si possono vedere alcuni esempi di implementazioni, ma sfortunatamente non ha prodotto alcuna soluzione generale e affidabile.

+0

Grazie per l'input. Mi piace il risultato nel loro collegamento, ma non sono sicuro di come potrei implementarlo in R. Sono d'accordo che è un'idea difficile. Avevo un'idea che avrei fatto l'aggregazione prima di aggiungere alla mappa, ai vari livelli di aggregazione, e quindi aggiungere alla mappa (a seconda del livello di zoom) solo quei punti che sono sulla mappa in quel punto nel tempo . (beh, idealmente, quelli che sono sulla mappa + un po 'di area circostante, quindi si ridisegnano solo quando i limiti della mappa si spostano all'esterno dell'area circostante.) Sto ancora lavorando su questo, però. Sperimentando alcuni errori strani. – Faydey

Problemi correlati