我试图通过动态方式在弹出窗口中为R包含图像生成我的传单地图 - 例如,
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'>"))
Run Code Online (Sandbox Code Playgroud)
然而,上面会产生一个糟糕的图像(图像中的图像).查看源使它看起来应该工作....不知道这里有什么问题.
{"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":[]}
Run Code Online (Sandbox Code Playgroud)
Tim*_*bim 12
如果你可以使用svg而不是jpg它应该工作.在这里看到我的答案.
编辑/更新:
可以嵌入非本地的图像文件.考虑以下内容,我们在维基百科中添加R徽标.
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, ">"))
Run Code Online (Sandbox Code Playgroud)
这很好用.
对于本地文件来说,它有点棘手leaflet,或者更好的是底层htmltools,期望指向图像文件的相对路径,该路径index.html存储在创建小部件时创建的临时文件夹中.因此,我们事先无法知道在哪里保存我们的图像.@Spacedman提供了一些用于leaflet在用户指定的文件夹中存储地图的功能,因此我们可以使用它们来创建这样的工作地图
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")
Run Code Online (Sandbox Code Playgroud)
我们保存index.html在与png现在相同的文件夹中如果我们index.html在浏览器中打开弹出窗口应该渲染png就好了.这也适用于jpg文件.
请注意,这仍然不会在RStudio查看器中显示所需的弹出行为.通过将图像编码为base64,可能还有一种可行的解决方法.当我找到时间时,我会深入研究这个问题.
更新2:mapview 的开发版现在具有以下专用功能:
popupImage() 用于嵌入本地或远程图像 popupGraph()用于嵌入基于格子,ggplot2或htmlwidgets的图mapview的开发版本可以安装:
devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5239 次 |
| 最近记录: |