如何从R/shiny中的传单地图获取缩放级别?
How to get the zoom level from the leaflet map in R/shiny?
我在 Shiny 中使用传单包创建了一个地图,其中有一个 selectInput
允许用户从站点列表 select。站点列表还作为标记添加到传单中。
当用户 select 创建一个新站点时,我想在不更改缩放级别的情况下将地图重新定位到 selected 站点。可以调用setView
函数来设置中心点,但必须指定缩放级别。
是否可以获取可在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:当您使用这些代码时,请在 select 访问新站点之前调整缩放级别。
感谢任何建议。
您可以使用 input$mapid_zoom
(see here) 访问缩放级别。
在您的 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)
})
})
我在 Shiny 中使用传单包创建了一个地图,其中有一个 selectInput
允许用户从站点列表 select。站点列表还作为标记添加到传单中。
当用户 select 创建一个新站点时,我想在不更改缩放级别的情况下将地图重新定位到 selected 站点。可以调用setView
函数来设置中心点,但必须指定缩放级别。
是否可以获取可在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:当您使用这些代码时,请在 select 访问新站点之前调整缩放级别。
感谢任何建议。
您可以使用 input$mapid_zoom
(see here) 访问缩放级别。
在您的 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)
})
})