代码之家  ›  专栏  ›  技术社区  ›  dca

如何仅在超过阈值时更新?

  •  0
  • dca  · 技术社区  · 7 年前

    在下面的代码中,在缩放更改后,将绘制两次传单添加圆。我认为出现这种双重绘图是因为反应式绘图需要创建数据帧 随着缩放的更改而更新。然而,我只想在超过缩放阈值时更新被动数据帧(race.dots.all.r)。有什么想法吗?

    编辑:为了简化,我删除了更多的代码,并通过在数据中添加dropbox链接使其可复制。

    library(shiny)
    library(leaflet)
    library(dplyr)
    
    load(url("https://www.dropbox.com/s/umhqvoqvbhlkrc6/shiny_app_seg_gap_stackoverflow.RData?dl=1"))
    
    ui <- shinyUI(fluidPage(
      leafletOutput("map"),
      checkboxInput("togglewhite",  "White", value = TRUE)
                                ))
    
    
    server <- shinyServer(function(input, output, session) {
    
      per.person <- eventReactive(input$map_zoom,{
    
        new_zoom <- 12
        if (!is.null(input$map_zoom)) {
          new_zoom <- input$map_zoom}
    
        if ( new_zoom < 13 ) {
          per.person <- "1000"
        } else {
          per.person <- "250"
        }
    
        return(per.person)
    
      })
    
      race.dots.all.r <- eventReactive(per.person(),{
        race.dots.all <- race.dots.all[[per.person()]]
        return(race.dots.all)
      })
    
    
      values <- reactiveValues(school = NULL)
    
      output$map <- renderLeaflet({
    
        leaflet(options = leafletOptions(preferCanvas = TRUE)) %>% 
          addProviderTiles("CartoDB") %>%
          setView(lat=40.73771, lng=-74.18958, zoom = 8)
      })
    
    
      observeEvent(c(input$togglewhite, race.dots.all.r()), {
    
        proxy <- leafletProxy('map')
        proxy %>% clearGroup(group = "White")
        if (input$togglewhite){
          race.dots.all.selected.race <- dplyr::filter( race.dots.all.r(), group == "White")
          proxy %>% addCircles(group = race.dots.all.selected.race$group, 
                               race.dots.all.selected.race$lng, 
                               race.dots.all.selected.race$lat)
        }
      },ignoreInit = TRUE)
    
    }) # close server
    
    shinyApp(ui, server)
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Shree    7 年前

    如果我正确理解你的要求,那么这里有一个方法。对于这个例子,我将缩放阈值设置为0,只是为了便于演示。你可以为你的应用程序将其更改为4。

    library(shiny)
    library(leaflet)
    
    shinyApp(
      ui = fluidPage(
        leafletOutput("map")
      ),
      server = function(input, output, session) {
        output$map <- renderLeaflet({
          leaflet() %>%
            addTiles()
        })
    
        map_proxy <- leafletProxy("map")
    
        observeEvent(input$map_zoom, {
          if(input$map_zoom > 0) {
            map_proxy %>%
              addCircleMarkers(lng = 74.0060, lat = 40.7128,
                               group = "high_zoom_in", radius = 50, color = "red")
          } else {
            map_proxy %>%
              clearGroup("high_zoom_in")
          }
        })
      }
    )