2016-04-05 8 views
5

che sto cercando di fare la mia mappa volantino generati da R includono immagini dei popup per i marcatori in modo dinamico - per esempio,Immagine in R Volantino di popup marcatori

library(leaflet) 


pts <- data.frame(Latitude = 30, Longitude = 30, file = "thing") 

leaflet() %>% 
    addTiles %>% 
    addCircleMarkers(data = pts, lng =~Longitude, lat = ~Latitude, 
        popup =~ paste0("<img src = './", file, ".jpg'>")) 

È possibile che questo genera una cattiva immagine (ye olde? in un'immagine), tuttavia. La visualizzazione della fonte lo fa apparire come in caso di lavoro .... non so cosa c'è di sbagliato qui.

{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null, 
"className":"","stroke":true,"color":"#03F","weight":5,"opacity":0.5,"fill":true," 
fillColor":"#03F","fillOpacity":0.2,"dashArray":null},null,null, 
"<img src = './thing.jpg'>"]}],"limits":{"lat":[30,30],"lng":[30,30]}},"evals":[]} 
+0

che dire: i tag $ div ( HTML ('')) – MLavoie

+0

No, che appena fatto il popup R generato hanno un sacco di testo tag extra dispari. – jebyrnes

risposta

8

Se è possibile utilizzare svg invece di jpg dovrebbe funzionare. Vedi la mia risposta here.

EDIT/UPDATE:
E 'possibile incorporare file di immagine che non sono locali. Considera quanto segue, dove aggiungiamo il logo R da Wikipedia.

library(leaflet) 

pts <- data.frame(Latitude = 30, Longitude = 30, file = "thing") 

file <- 'https://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Rlogo.png/274px-Rlogo.png' 

leaflet() %>% 
    addTiles %>% 
    addCircleMarkers(data = pts, lng =~Longitude, lat = ~Latitude, 
        popup = paste0("<img src = ", file, ">")) 

Questo funziona bene.

Per i file locali, è un po 'più difficile in quanto leaflet, o meglio il sottostante htmltools, si aspetta i percorsi relativi al file di immagine specificato dalla posizione del index.html che viene memorizzato in una cartella temporanea che si sta creando su creazione di widget. Quindi non possiamo sapere in anticipo dove salvare le nostre immagini in anticipo. @Spacedman fornito alcune funzioni per la memorizzazione leaflet le mappe in una cartella specificata dall'utente, in modo che possiamo usare quelli per creare la nostra mappa di lavoro come questo

library (leaflet) 

saveas <- function(map, file){ 
    class(map) <- c("saveas",class(map)) 
    attr(map,"filesave")=file 
    map 
} 

print.saveas <- function(x, ...){ 
    class(x) = class(x)[class(x)!="saveas"] 
    htmltools::save_html(x, file=attr(x,"filesave")) 
} 

file <- '/path/to/folder/image.png' 

pts <- data.frame(Latitude = 30, Longitude = 30, file = "thing") 

m <- leaflet() %>% 
    addTiles %>% 
    addCircleMarkers(data = pts, lng =~Longitude, lat = ~Latitude, 
        popup = paste0("<img src = ", file, ">")) 

saveas(m, "/path/to/folder/index.html") 

Salviamo il index.html nella stessa cartella del png così ora se apriamo il index.html in un browser il popup dovrebbe rendere il png bene. Questo dovrebbe funzionare anche con i file jpg.

Si noti che questo non mostrerà ancora il comportamento popup desiderato nel visualizzatore RStudio. Potrebbe esserci una soluzione alternativa per questo anche codificando le immagini su base64. Approfondirò questo quando trovo il tempo.

UPDATE 2: La versione di sviluppo di mapview funzioni ora ha dedicato per questo:

  • popupImage() per l'incorporamento immagini locali o remoti
  • popupGraph() per l'incorporamento reticolo, ggplot2 oppure htmlwidgets lotti basati

La versione di sviluppo di mapview può essere installato con:

devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop" 
+0

Hrm - No, sono jpg forniti da un collaboratore. – jebyrnes

+0

Sembra che questo sia un problema relativo al sistema operativo.Sulla mia macchina, l'approccio suggerito da @TimSalabim funziona perfettamente su Ubuntu 14.04, ma fallisce su Windows 7. – fdetsch

+0

Ha - Penso che li caricherò su un altro server. Sembra la soluzione migliore per il momento. O almeno, più facile! – jebyrnes