将WebGLHeatmap从Leaflet.extras保存到R

时间:2018-07-16 15:03:48

标签: r leaflet webgl

我正在一个项目中,我希望以自动化方式从leaflet.extras创建并保存WebGLHeatmap图像。不幸的是,虽然下面的代码:

map = leaflet(df) %>%
      addWebGLHeatmap(lng=~df$longitude, lat=~df$latitude, opacity= 1 , intensity = .5 ,size = 1000, gradientTexture='deep-sea', data=df)%>%
      addTiles(urlTemplate = map, attribution=attr)

产生所需的图像:

enter image description here

当我尝试使用以下代码将图像保存在代码中(最终将要做):

saveWidget(map, "tmp.html", selfcontained = F)
webshot("temp.html", file = "new_orleans.png", cliprect = "viewport")

我剩下的是以下图片:

enter image description here

我在webshot github页面上打开了一个问题,该问题的所有者给了我response。我还知道在SO last year上也解决了类似的问题,但是似乎没有任何解决方案。

由于我只看到过使用webshot或mapshot保存leaflet.extras映射的示例(这给了我完全相同的问题),所以我想知道遇到此问题的任何人是否能够通过某种方式成功解决它解决方法,或者使用另一个我不熟悉的R软件包。

1 个答案:

答案 0 :(得分:1)

调用system可能有点麻烦,但是我认为您可以使用RSelenium和操作系统随附的屏幕截图软件来完成此工作:

library(leaflet.extras)
library(leaflet)
library(RSelenium)

## addWebGLHeatmap
leaflet(quakes) %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addWebGLHeatmap(lng = ~long, lat = ~lat, size = 60000)

quakeplot <- leaflet(quakes) %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addWebGLHeatmap(lng = ~long, lat = ~lat, size = 60000)
quakeplot

htmlwidgets::saveWidget(quakeplot, "quake.html")

rD <- rsDriver(browser="firefox")
remDr <- rD$client

remDr$navigate(paste0("file://", getwd(), "/quake.html"))

Sys.sleep(5)
system("gnome-screenshot -f test2.png")
remDr$close()

我将文件保存到当前工作目录,然后使用getwd()在浏览器中显示该文件。之所以Sys.sleep()进行调用,是因为传单似乎需要永久加载(这可能是您原始问题的一部分)。

最终结果:

enter image description here

虽然不完美,但还算不错!