首页 > 解决方案 > 如何在 R Shiny 网页中访问 Leaflet 中同步地图的缩放和位置设置

问题描述

我正在构建一个显示同步地图的 R Shiny 网页。根据用户设置的过滤条件,显示的地图数量会发生变化。这些地图是作为传单即时构建的,并在动态 UI 面板中使用 sync() 显示。

当用户进行新选择时,我希望地图的位置和缩放级别保持不变。我想我可以通过保存并重新应用地图当前状态的缩放和位置值来做到这一点,但是当它们被包装在渲染中的 sync() 中时,我不知道如何获取这些值用户界面。

这是迄今为止我所拥有的一个简化的、可运行的示例。

library(shiny)
library(leaflet)
library(leafsync)

ui <- fluidPage(

    # Application title
    titlePanel("Display N Maps"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("mapCount",
                        "Number of maps:",
                        min = 1,
                        max = 4,
                        value = 2)
        ),

        # Show a plot of the generated distribution
        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({
        print(input$map1_zoom)
        mapArray <- apply(as.array(1:input$mapCount), 1, 
                          function(i){tileMap(i)})
        sync(mapArray)
    })
    
}

shinyApp(ui = ui, server = server)

input$map1_zoom是尝试应用在回答这个问题时给出的建议如何从 R/shiny 中的传单地图中获取缩放级别?但该值始终为 NULL。

有没有办法访问我正在寻找的位置和缩放级别?更好的是,也许我采取了一种不必要的复杂方法来解决我的问题,有人会提供一种更好、更清洁、更简单的方法来创建和显示我的地图。

标签: rshinyr-leaflet

解决方案


推荐阅读