R Leaflet Offline Tiles within Shiny

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

Is it possible to load offline/local leaflet map tiles within a Shiny app? I am able to load the tiles in an interactive R session as shown here, but I now want to try and load them for use in a Shiny app. Here's an example of what I have so far. I'm thinking it has something to do with Shiny running through an IP and port and needing to load the tiles through an IP and port as well. I've tried a few things to change IPs and ports (making them the same) as explained here but haven't figured out anything that works. I can also get it to work using online tiles, but I need it to work with local map tiles.

library(shiny) library(leaflet) library(RColorBrewer) library(RgoogleMaps)  options(shiny.port = 8000)    (bwi <- getGeoCode("BWI;MD"))  df <- as.data.frame(rbind(bwi)) df$col <- c("orange") df$name <- c("BWI")  icons <- awesomeIcons(   icon = 'ios-close',   iconColor = 'black',   library = 'ion',   markerColor = df$col ) #################################################################################  ui <- bootstrapPage(   tags$style(type = "text/css", "html, body {width:100%;height:100%}"),   leafletOutput("map", width = "100%", height = "100%"),   absolutePanel(top = 10, right = 10,                 style = "padding: 8px; background: #FFFFEE; opacity:.9",     checkboxInput("markers", "Show Markers?", TRUE)   ) )     #################################################################################  server <- function(input, output, session) {    output$map <- renderLeaflet({     leaflet() %>%        addTiles(urlTemplate = "http:/localhost:8000/C:/Users/OTAD USER/Documents/mapTiles/ESRIWorldTopoMap/{z}_{x}_{y}.png") %>%       setView(lat = bwi[1], lng = bwi[2], zoom = 8)   })    observe({     proxy <- leafletProxy("map", data = df)      # Remove/show any markers     proxy %>% clearMarkers()     if (input$markers) {       proxy %>% addAwesomeMarkers(lat = df$lat, lng = df$lon,                                   icon = icons, label = df$name)     }   }) }  #Put the ui and server together and run runApp(shinyApp(ui = ui,           server = server), launch.browser=TRUE ) 

回答1:

1- You have to authorize shiny to serve tiles in that folder by providing an "alias" on the ressource with addResourcePath

2- then use that alias as the base URL in addTiles

server <- function(input, output, session) {     addResourcePath("mytiles", "C:/Users/OTAD USER/Documents/mapTiles/ESRIWorldTopoMap")     output$map <- renderLeaflet({       leaflet() %>%          addTiles(urlTemplate = "/mytiles/{z}_{x}_{y}.png") %>%         setView(lat = bwi[1], lng = bwi[2], zoom = 8)     }) ... 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!