2016-04-05 11 views
5

Staram się aby moje mapy ulotki generowany przez R obejmują obrazy w pop-upów dla markerów w sposób dynamiczny - npObraz w R ulotka pop-upów markerów

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'>")) 

Powyższy generuje zły wizerunek (ye olde? na zdjęciu). Wyświetlanie źródła sprawia, że ​​wygląda on tak, jakby to było powinno być praca .... nie jestem pewien, co tu jest nie tak.

{"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

co: tagi $ div ( HTML ('')) – MLavoie

+0

Nie, to po prostu się podręczne R generowane mieć dużo dodatkowego tekstu tagu nieparzystego. – jebyrnes

Odpowiedz

8

Jeśli można użyć svg zamiast jpg powinno działać. Zobacz moją odpowiedź here.

EDIT/UPDATE:
Możliwe jest umieszczanie plików graficznych, które nie są lokalne. Zastanówmy się, skąd dodamy logo R z Wikipedii.

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, ">")) 

Działa to dobrze.

Dla lokalnych plików jest to nieco bardziej skomplikowane, jak leaflet lub lepiej bazowego htmltools, spodziewa ścieżek względnych do określonego pliku obrazu z lokalizacji index.html który jest przechowywany w folderze tymczasowym, który jest tworzony na tworzenie widgetów. Dlatego nie możemy z góry wiedzieć, gdzie wcześniej zapisać nasze obrazy. @Spacedman warunkiem pewnych funkcji do przechowywania leaflet mapy w folderze określoną przez użytkownika, dzięki czemu możemy korzystać z tych, aby stworzyć mapę pracuje jak to

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") 

Zapisujemy index.html w tym samym folderze co png więc teraz, jeśli otworzymy index.html w przeglądarce popup powinien renderować png dobrze. Powinno to również działać z plikami jpg.

Należy zauważyć, że to nadal nie będzie wyświetlać pożądanego zachowania popup w przeglądarce RStudio. Możliwe, że obejmie to również kodowanie obrazów do base64. Wkopię się głębiej w to, kiedy znajdę czas.

UPDATE 2: Wersja rozwój MapView tej pory dedykowane funkcje dla tego:

  • popupImage() do osadzania lokalne lub zdalne obrazki
  • popupGraph() do osadzania kratownica, ggplot2 lub htmlwidgets na podstawie działek

Wersja rozwój MapView mogą być instalowane z:

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

Hrm - nie, to jpgs dostarczane przez współpracownika. – jebyrnes

+0

Wygląda na to, że jest to związany z systemem operacyjnym.Na moim komputerze podejście sugerowane przez @TimSalabim działa idealnie na Ubuntu 14.04, ale kończy się niepowodzeniem w Windows 7. – fdetsch

+0

Ha - Myślę, że po prostu wgranę je na inny serwer. Wydaje się, że lepsze rozwiązanie w tej chwili. A przynajmniej łatwiej! – jebyrnes

Powiązane problemy