开发者问题收集

如何从 R/shiny 中的传单地图获取缩放级别?

2016-01-25
10701

我使用 Shiny 中的 leaflet 包创建了一张地图,该包有一个 selectInput 允许用户从站点列表中进行选择。站点列表也作为标记添加到 leaflet 中。

当用户选择一个新站点时,我想将地图重新​​定位到所选站点而不更改缩放级别。可以调用 setView 函数来设置中心点,但必须指定缩放级别。

是否可以获取 leaflet 地图的缩放级别,以便在 setView 函数中使用?

这是一个最小示例,用于解决我的问题并重置缩放级别。

library(shiny)
library(leaflet)

df <- data.frame(
    site = c('S1', 'S2'),
    lng = c(140, 120),
    lat = c(-20, -30), 
    stringsAsFactors = FALSE)

# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(
    selectInput('site', 'Site', df$site),
    leafletOutput('map')

))

server <- shinyServer(function(input, output, session) {

    output$map <- renderLeaflet({
        leaflet() %>%
            addTiles() %>% 
            setView(lng = 133, lat = -25,  zoom = 4) %>% 
            addMarkers(lng = df$lng, lat = df$lat)
    })

    observe({
        req(input$site)
        sel_site <- df[df$site == input$site,]
        isolate({
            leafletProxy('map') %>%
                setView(lng = sel_site$lng, lat = sel_site$lat, zoom = 4)
        })
    })
})

shinyApp(ui = ui, server = server)

PS:使用这些代码时,请在选择新站点之前调整缩放级别。

感谢您的任何建议。

1个回答

您可以使用 input$mapid_zoom 访问缩放级别( 参见此处 )。

在您的 observe 中,您可以执行以下操作:

 observe({
                sel_site <- df[df$site == input$site,]
                isolate({
                        new_zoom <- 4
                        if(!is.null(input$map_zoom)) new_zoom <- input$map_zoom
                        leafletProxy('map') %>%
                                setView(lng = sel_site$lng, lat = sel_site$lat, zoom = new_zoom)
                })
        })
NicE
2016-01-25