Using shiny, leaflet, and leafsync I'm building a group of maps and displaying them on a web page. A user of the page can change the number of maps by setting values for a group of selection criteria. It's working well enough, but I'm building the maps on-the-fly, and the position and zoom level of the maps revert to their initial values when the number of maps changes. Here's a very simplified version of my app.
library(shiny)
library(leaflet)
library(leafsync)ui <- fluidPage(
# Application title titlePanel("Display N Maps"), # Sidebar with a slider input for number of maps sidebarLayout( sidebarPanel( sliderInput("mapCount", "Number of maps:", min = 1, max = 4, value = 2) ), # Display a dynamically created set of maps mainPanel( uiOutput("tiledMaps") ) )
)
server <- function(input, output) {
map.rv <- reactiveValues() map.rv$count <- 0 map.rv$zoom <- 9 map.rv$ctrLng <- 174.768 map.rv$ctrLat <- -36.852 tileMap <- function(i) { leaflet(paste0("map",i)) %>% addTiles() %>% setView(lng = map.rv$ctrLng, lat = map.rv$ctrLat, zoom = map.rv$zoom) } output$tiledMaps <- renderUI({ mapArray <- apply(as.array(1:input$mapCount), 1, function(i){tileMap(i)}) sync(mapArray) })
}
shinyApp(ui = ui, server = server)
If I knew the current values for the sync'd maps position and zoom, I could set the reactive variables and build maps that match, but I can't figure out how to access the the equivalent of the input$MAPID_zoom or input$MAPID_center values when the maps are inside a sync.