【发布时间】:2022-01-17 16:04:14
【问题描述】:
如何在两个不同的observeEvent 中添加两个clearMarkers?
以下是一个可重现的示例。该应用程序根据反应函数绘制两组不同的点。反应来自input_gr_letter 的选择。我希望如果用户选择alpha 和A 和C 应用程序同时显示A 和C。由于clearMarkers() 元素,现在只绘制两者中的一个。
我尝试过clearMarkers(data_point()) 和clearMarkers(data_point2()) 之类的方法。
我可以将两者放在同一个 observeEvent 中,如下所示,但我真的想将它们放在两个不同的 observeEvent 中。有什么想法吗?
observeEvent(list(input$input_letter,input$input_letter2, input$input_gr_letter), {
leafletProxy("map1") %>%
clearMarkers() %>%
addMarkers(data = data_point()) %>%
addMarkers(data = data_point2())
}, ignoreInit = T)
library(shiny)
library(shinyWidgets)
library(leaflet)
library(leaflegend)
library(dplyr)
library(sp)
library(raster)
library(rgdal)
library(rgeos)
points <- c("A", "A", "B", "B")
lat <- c(9,10,11,10)
lon <- c(11,10,2,12)
type <- c(alpha= "alpha",beta = "beta",theta = "theta",gamma = "gamma")
df <- data.frame(points,lat,lon,type)
points2 <- c("C", "D")
lat2 <- c(19,20)
lon2 <- c(12,14)
type2 <- c(alpha= "alpha",beta = "beta")
df2 <- data.frame(points2,lat2,lon2,type2)
coordinates(df)<-~lat+lon
proj4string(df) <- CRS("+proj=longlat +datum=WGS84 +no_defs")
coordinates(df2)<-~lat2+lon2
proj4string(df2) <- CRS("+proj=longlat +datum=WGS84 +no_defs")
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map1", width = "100%", height = "100%"),
absolutePanel(left = 10, bottom = 10, draggable = TRUE,
selectInput(inputId = "input_letter", label = "Select Letter",
choices = c("A","B")),
selectInput(inputId = "input_letter2", label = "Select Letter",
choices = c("C","D")),
selectInput(inputId = "input_gr_letter", label = "Select Gr Letter",
choices = c("alpha","beta","theta","gamma"),
multiple = TRUE)
))
server <- function(input, output, session) {
# Create the map
output$map1 <- renderLeaflet({
leaflet(
option = leafletOptions(attributionControl=FALSE)) %>%
addTiles()
})
data_point <- reactive({
df[df@data$points == input$input_letter & df@data$type %in% input$input_gr_letter,]
})
data_point2 <- reactive({
df2[df2@data$points2 == input$input_letter2 & df2@data$type2 %in% input$input_gr_letter,]
})
# Reactive Map ---------------------------------
observeEvent(list(input$input_letter, input$input_gr_letter), {
leafletProxy("map1") %>%
clearMarkers() %>%
addMarkers(data = data_point())
}, ignoreInit = T)
observeEvent(list(input$input_letter2, input$input_gr_letter), {
leafletProxy("map1") %>%
clearMarkers() %>%
addMarkers(data = data_point2())
}, ignoreInit = T)
}
shinyApp(ui, server)
【问题讨论】: