R 如何在传单地图中的闪亮应用程序中停止反应?

R 如何在传单地图中的闪亮应用程序中停止反应?,r,shiny,leaflet,reactive-programming,R,Shiny,Leaflet,Reactive Programming,在我闪亮的应用程序中,我有一个选择Input站点,列出所有气象站和传单地图。按照我前面的问题(),我可以setView而无需更改缩放级别 现在我想添加一个新功能,允许用户单击地图中的标记,并在selectInput中更新所选值。在我的当前代码中(请参见下面的示例),将更新站点的选定值,但也会调用设置视图,以更改视图点 我期望的功能是1)选择新站点更新视图,2)单击地图不更新视图 我如何打破这两个特性之间的联系?我想我可以使用隔离来实现它。老实说,我仍然对隔离感到困惑 谢谢你的建议 以下是我的示例

在我闪亮的应用程序中,我有一个
选择Input
站点
,列出所有气象站和传单地图。按照我前面的问题(),我可以
setView
而无需更改缩放级别

现在我想添加一个新功能,允许用户单击地图中的标记,并在
selectInput
中更新所选值。在我的当前代码中(请参见下面的示例),将更新
站点
的选定值,但也会调用
设置视图
,以更改视图点

我期望的功能是1)选择新站点更新视图,2)单击地图不更新视图

我如何打破这两个特性之间的联系?我想我可以使用
隔离
来实现它。老实说,我仍然对隔离感到困惑

谢谢你的建议

以下是我的示例代码:

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, popup = df$site)
    })


    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)
        })
    })

    observe({
        event <- input$map_marker_click

        if (is.null(event))
            return()
        click_site <- df %>% 
            filter(lng == event$lng, lat == event$lat)
        isolate({
            updateSelectInput(session, 'site', selected = click_site$site)
        })
    })


})

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)

df这并不是你想要的,因为它使用了一个按钮,但也许你可以好好利用它。我还修复了你的过滤

library(shiny)
library(leaflet)

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

ui <- shinyUI(fluidPage(
  selectInput('site', 'Site', df$site),
  actionButton("center","Center map on 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, popup = df$site)
  })
observeEvent(input$center,{
    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)
    })
  })

  observe({
    event <- input$map_marker_click

    if (is.null(event))
      return()
    else{
    latdist<- unlist(lapply((event$lat - df$lat), FUN=abs))

      if (min(latdist)<4){ 
      match <- 
        df[with(df, {which(lat[latdist==min(latdist)] == lat ) 
      }), ]
      if(abs(match$lng-event$lng)<4)
      {
        click_site <- df[with(df,{ which(lng == match$lng & lat == match$lat) }),]  
      }
      updateSelectInput(session, 'site', selected = click_site$site)

     }# first if
    } # end else
  })
})

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)

df这并不是你想要的,因为它使用了一个按钮,但也许你可以好好利用它。我还修复了你的过滤

library(shiny)
library(leaflet)

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

ui <- shinyUI(fluidPage(
  selectInput('site', 'Site', df$site),
  actionButton("center","Center map on 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, popup = df$site)
  })
observeEvent(input$center,{
    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)
    })
  })

  observe({
    event <- input$map_marker_click

    if (is.null(event))
      return()
    else{
    latdist<- unlist(lapply((event$lat - df$lat), FUN=abs))

      if (min(latdist)<4){ 
      match <- 
        df[with(df, {which(lat[latdist==min(latdist)] == lat ) 
      }), ]
      if(abs(match$lng-event$lng)<4)
      {
        click_site <- df[with(df,{ which(lng == match$lng & lat == match$lat) }),]  
      }
      updateSelectInput(session, 'site', selected = click_site$site)

     }# first if
    } # end else
  })
})

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)

df您在哪里找到引用
输入$map\u zoom
的文档?我有一个有点相关的问题,我正试图弄清到底。我不完全清楚这个问题,但我们正在构建
mapedit
,以帮助实现其中一些目标。请看邮报。我们希望得到反馈。您在哪里找到引用
input$map\u zoom
的文档?我有一个有点相关的问题,我正试图弄清到底。我不完全清楚这个问题,但我们正在构建
mapedit
,以帮助实现其中一些目标。请看邮报。我们希望得到反馈。