2016-04-05 24 views
5

Tôi đang cố gắng để làm cho bản đồ tờ rơi của tôi được tạo ra bởi R bao gồm hình ảnh trong quảng cáo cho các dấu hiệu theo một cách năng động - ví dụ,Hình ảnh trong popup marker R Tờ rơi

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

Trên đây tạo ra một hình ảnh xấu (ye olde? trong một hình ảnh), tuy nhiên. Xem nguồn làm cho nó trông giống như nó nên làm việc .... không chắc chắn những gì sai ở đây.

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

gì về: thẻ $ div ( HTML ('')) – MLavoie

+0

Nope, mà chỉ cần thực hiện popup R được tạo ra có một nhiều văn bản thẻ kỳ lạ bổ sung. – jebyrnes

Trả lời

8

Nếu bạn có thể sử dụng svg thay vì jpg nó sẽ hoạt động. Xem câu trả lời của tôi here.

CHỈNH SỬA/CẬP NHẬT:
Có thể nhúng tệp hình ảnh không phải cục bộ. Hãy xem xét những điều sau đây, nơi chúng tôi thêm biểu trưng R từ 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, ">")) 

Điều này chỉ hoạt động tốt.

Đối với tập tin địa phương đó là khó khăn hơn một chút như leaflet, hoặc tốt hơn các tiềm ẩn htmltools, dự kiến ​​đường dẫn tương đối đến tập tin hình ảnh định từ vị trí của index.html hiện đang được lưu trữ trong một thư mục tạm thời đang được tạo ra trên tạo widget. Do đó chúng tôi không thể biết trước nơi để lưu hình ảnh của chúng tôi trước. @Spacedman cung cấp một số chức năng để lưu trữ leaflet bản đồ trong một người dùng xác định thư mục, vì vậy chúng tôi có thể sử dụng những để tạo ra bản đồ làm việc của chúng tôi như thế này

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

Chúng tôi lưu index.html trong thư mục giống như png vì vậy bây giờ nếu chúng ta mở index.html trong trình duyệt cửa sổ bật lên sẽ hiển thị số png tốt. Điều này cũng sẽ hoạt động với các tệp jpg.

Lưu ý rằng điều này sẽ vẫn không hiển thị hành vi bật lên mong muốn trong trình xem RStudio. Có thể có cách giải quyết khác cho việc này bằng cách mã hóa hình ảnh thành base64. Tôi sẽ đào sâu hơn vào điều này khi tôi tìm thấy thời gian.

UPDATE 2: Các phiên bản phát triển của MapView chức năng hiện nay đã dành riêng cho việc này:

  • popupImage() cho nhúng hình ảnh địa phương hoặc từ xa
  • popupGraph() cho nhúng lưới, ggplot2 hoặc htmlwidgets các ô dựa trên

Các phiên bản phát triển của MapView thể được cài đặt với:

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

Hrm - không, đó là jpg được cung cấp bởi một cộng tác viên. – jebyrnes

+0

Dường như đây là sự cố liên quan đến hệ điều hành.Trên máy tính của tôi, cách tiếp cận được đề xuất bởi @TimSalabim hoạt động hoàn hảo trên Ubuntu 14.04, nhưng không thành công trên Windows 7. – fdetsch

+0

Ha - Tôi nghĩ tôi sẽ chỉ tải chúng lên máy chủ khác. Có vẻ như giải pháp tốt hơn cho thời điểm này. Hoặc ít nhất, dễ dàng hơn! – jebyrnes

Các vấn đề liên quan