R Leaflet Offline Tiles in Shiny

Can I load offline local tile map tiles in the Shiny app? I can load tiles into an interactive R session as shown here , but now I want to try loading them for use in the Shiny app. Here is an example of what I have so far. I think this is because Shiny works over IP and port and also needs to load tiles over IP and port. I've tried a few things to change the IPs and ports (make them the same) as described here , but haven't figured out anything that works. I can also get it to work using online snippets, but I need it to work with local maps.

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
)

      

+3


source to share


1 answer


1. You must authorize shiny to serve the tiles in this folder by providing an "alias" in the ressource with addResourcePath

2- then use this alias as 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)
    })
...

      

+3


source







All Articles