R闪亮的单张切换组点从UI checkboxGroupInput而不是addLayersControl



给定一个闪亮的应用程序显示多组地图点通过传单,我想创建一个切换显示/隐藏特定组

我能实现这一目标通过addLayersControl按照下面的例子:

library(shiny)
library(shinyjs)
library(leaflet)
library(dplyr)
ui <- fluidPage(
leafletOutput("mymap",height = '100vh')
)
server <- function(input, output) {
data(quakes)

output$mymap <- renderLeaflet({
leaflet(data = quakes) %>% 

setView(lng = quakes[1, 'long'],
lat = quakes[1, 'lat'],
zoom=5) %>%

addTiles()
})

observe({
leafletProxy('mymap', data = quakes) %>%

clearShapes() %>%

addCircleMarkers(data = quakes[quakes$mag>=5, ],
~long,
~lat,
radius=3,
group = 'quakes1',
stroke=FALSE,
fillOpacity=0.5,
color = 'red')  %>%

addCircleMarkers(data = quakes[quakes$mag<5, ],
~long,
~lat,
radius=3,
group = 'quakes2',
stroke=FALSE,
fillOpacity=0.5,
color = 'green')  %>%

addLayersControl(overlayGroups = c('quakes1','quakes2'),
options = layersControlOptions(collapsed = FALSE))
})
}
shinyApp(ui, server)

然而,我更希望切换由服务器端创建的checkboxGroupInput处理。比如:

# Changing `mag` to a binary classification for simplicity
quakes$mag<- ifelse(quakes$mag >=5, 1, 2)
output$quakesToggle <- renderUI({
checkboxGroupInput('quakesToggle', 'Select magnitude:',
choices  = list('Quakes1'=1,'Quakes2'=2)
)
})
observe({
toggle(id='foo', condition = 'Quakes1' %in% input$quakesToggle)
toggle(id='bar', condition = 'Quakes2' %in% input$quakesToggle)
})

问题是我不知道如何或即使有可能将切换id与传单地图点的相关组关联…

谢谢你的帮助。

这是一个可能的解决方案:

library(shiny)
library(shinyjs)
library(leaflet)
library(dplyr)
ui <- fluidPage(
uiOutput("quakesToggle"),
leafletOutput("mymap",height = '100vh')
)
server <- function(input, output) {
data(quakes)

output$mymap <- renderLeaflet({
leaflet(data = quakes) %>% 
setView(lng = quakes[1, 'long'],
lat = quakes[1, 'lat'],
zoom=5) %>%
addTiles() %>%
addCircleMarkers(data = quakes[quakes$mag>=5, ],
~long,
~lat,
radius=3,
group = 'quakes1',
stroke=FALSE,
fillOpacity=0.5,
color = 'red')  %>%
addCircleMarkers(data = quakes[quakes$mag<5, ],
~long,
~lat,
radius=3,
group = 'quakes2',
stroke=FALSE,
fillOpacity=0.5,
color = 'green')
})

output$quakesToggle <- renderUI({
checkboxGroupInput('quakesToggle', 'Select magnitude:',
choices  = c('Quakes1','Quakes2'),
selected = c('Quakes1','Quakes2')
)
})

observeEvent(input$quakesToggle, {
if('Quakes1' %in% input$quakesToggle) {
leafletProxy('mymap', data = quakes) %>%
showGroup('quakes1')
} else {
leafletProxy('mymap', data = quakes) %>%
hideGroup('quakes1')
}

if('Quakes2' %in% input$quakesToggle) {
leafletProxy('mymap', data = quakes) %>%
showGroup('quakes2')
} else {
leafletProxy('mymap', data = quakes) %>%
hideGroup('quakes2')
}
}, ignoreNULL = FALSE)
}
shinyApp(ui, server)

相关内容

  • 没有找到相关文章

最新更新