R:使用addResourcePath渲染本地传单图块

时间:2019-12-04 10:53:08

标签: r shiny leaflet

我想为传单添加本地图块,以使其在闪亮的应用程序中脱机。 尽管有herehere这样的解决方案,但我仍然得到没有地图的灰色地图。看到一些可重现的示例确实对我有帮助。 谢谢。

我的示例代码:

library(shiny)
library(dplyr)
library(RgoogleMaps)

#downloads tiles for a given regions, saves it to C:/Users/.../mapTiles/OSM
for (zoom in 0:16)
  GetMapTiles(center = c(lat = 52.431635, lon = 13.194773),
              zoom = zoom,
              nTiles = round(c(20,20)/(17-zoom)))
#shiny ui 
ui = fluidPage(leafletOutput("map"))

#create basic map, load tiles from directory and set view to centre of downloaded tiles
server = function(input, output, server){
  addResourcePath(prefix = "OSM", "C:/Users/.../mapTiles")
  output$map = renderLeaflet({
    leaflet() %>% 
      addTiles( urlTemplate = "/OSM/{z}_{x}_{y}.png") %>% 
      setView(52.431635, 13.194773 , zoom = 10) %>%  #set to the location with tiles
      addMarkers(52.431635, 13.194773 )
  }
  )
}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:1)

在我的情况下,我通过gdal2tiles创建了自己的图块,该图块将获取您的数据并自动创建{z} / {x} / {y} .png文件夹结构。请参阅this link,以获取不错的教程以及我对文件结构的理解;

+---14
|   +---8185
|     +---5460.png
|     +---5461.png
|     +---etc.png
|   \---8186

# I use the following server (see how my addTiles has a folder structure)
server <- function(input, output,session) {
   addResourcePath("mytiles", "C:/.../tiles")
   output$tilemap <- renderLeaflet({
     leaflet() %>%
       setView(lng = -4.4, lat = 52, zoom = 12) %>%
       addTiles(urlTemplate = "mytiles/{z}/{x}/{y}.png")

   })
}

现在,当您从Google Maps将图块下载到硬盘驱动器时,您将需要一种略有不同的方法,因为文件以{z}_{x}_{y}.png格式下载,而不是像gdal create那样生成为文件结构;

+ --- 11_1098_671.png 等

因此您需要使用下划线(例如Google文件名)来调整addTiles代码以反映这一点;

server <- function(input, output,session) {
  addResourcePath("mytiles", "C:/.../OSM")
  output$tilemap <- renderLeaflet({
    leaflet() %>%
      setView(lng = 13.194773, lat = 52.431635, zoom = 11) %>%
      addTiles(urlTemplate = "mytiles/{z}_{x}_{y}.png")

  })

}

最后,我的setView参数与您的顺序不同,但是我不确定这是否有所不同。

答案 1 :(得分:0)

我尝试了此解决方案,但无法正常工作,该主题很旧,但确实帮助我实现了我想做的事情,在相同的情况下,我通过创建两个端口为您找到了另一个解决方案:

  • 只需为闪亮的服务器(3838)和托管磁贴的服务器(8000)定义两个不同的端口即可。

servr::httd(dir="C:/TestApp/data_hydrepat/tiles_hydrepat/mapTiles/mytiles",daemon=TRUE,port=8000) options(shiny.port = 3838)

  • 要关闭托管磁贴的服务器,只需在输入等内容上放置一个反应式,然后关闭

(servr::daemon_stop(which = daemon_list())

希望会有所帮助!