2015-12-28 11 views
9

Attualmente sono in grado di tracciare una linea retta tra i paesi che utilizzano il seguente codice:Aggiunta Percorso curvo Volo utilizzando foglio illustrativo di R

library(leaflet) 
leaflet() %>% addTiles() %>% addPolylines(lat=c(38.8833, 35.00), lng=c(-77.0167, 103.00)) 

enter image description here

Quello che sto cercando di produrre è un altro percorso di volo realistico, in cui la linea retta è effettivamente curva. Simile a questo:

Curved Path Example

Per il bene di questa domanda, vorrei adattare la risposta all'interno del pacchetto Leaflet. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

10

seguito su mrub, basta passare l'oggetto si ottiene da gcIntermediate al volantinaggio . qualcosa di simile:

library(leaflet) 
library(geosphere) 
gcIntermediate(c(5,52), c(-120,37), 
       n=100, 
       addStartEnd=TRUE, 
       sp=TRUE) %>% 
leaflet() %>% 
addTiles() %>% 
addPolylines() 
+0

geniale! Come hai saputo passare in gcIntermediate a un volantino? –

+3

la classe dell'oggetto restituita da gcIntermediate è "SpatialLines". e il volantino piace molto a questa classe (o qualsiasi altra "Spaziale ..." :-) – einar

1

Siete alla ricerca di qualcosa di simile: How to draw great circles Nella risposta, il pacchetto geosphere con la funzione gcIntermediate() viene utilizzato:

inter <- gcIntermediate(c(lon_1, lat_1), c(lon_2, lat_2), n=50, addStartEnd=TRUE) 
lines(inter) 
+1

Sto cercando qualcosa che rimane all'interno del pacchetto 'Leaflet'. Questa funzione può essere chiamata all'interno di "Leaflet"? –

+0

Non sapevo che volevi utilizzare esclusivamente 'leaflet'. Per questo è possibile utilizzare il plugin leaflet [arc] (https://github.com/springmeyer/arc.js). – mrub

+0

puoi fornire un esempio di quel plugin che viene utilizzato in R? Mi sembra che il plugin che hai fornito sia solo per JavaScript. –

2

Durante il tentativo di mostrare più di una riga con il metodo inviato da einar, non ho potuto mostrare entrambi in una volta. Dopo molte ricerche, ho trovato post this e this. Ecco un piccolo codice per due diverse linee.

library(geosphere) 
library(leaflet) 
library(dplyr) 

lat_ny <- 40.73 
lng_ny <- -73.9 
lat_del <- 28.63 
lng_del <- 77.21 
lng_ca <- -121.6406 
lat_ca <- 39.16414 

inter1 <- gcIntermediate(c(lng_ny, lat_ny), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE) 
lines(inter1) 

inter2 <- gcIntermediate(c(lng_ca, lat_ca), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE) 
lines(inter2) 

inters <- c(inter1,inter2) 

ll0 <- lapply(inters , function(x) `@`(x , "lines")) 
ll1 <- lapply(unlist(ll0) , function(y) `@`(y,"Lines")) 
Sl <- SpatialLines(list(Lines(unlist(ll1) , ID = 1))) 

leaflet(Sl) %>% addTiles() %>% addPolylines() 

hardcoding latitudine e longitudine non è una buona idea, ma come ho dovuto scegliere solo primo posto 5 connettersi, non ho dedicare molto tempo per l'indicizzazione di un elenco. Inoltre, devo ancora verificare se si integra con Shiny.

Output

Problemi correlati