似乎没有得到map_marker_click注册我点击了Shiny / Leaflet

时间:2018-03-27 11:47:12

标签: r shiny leaflet

我想建立一个互动地图,让我可以使用R中的Shiny / Leaflet密切关注特定地区的设施

区域是用户输入(下拉框),如果用户检查框,则显示设施。所有这些都很好。

当我点击代表该设施的标记时,我希望Leaflet / Shiny绘制与设施相关的多边形。但似乎R甚至没有在input$map_marker_click函数中注册我的observe

所以我的ui.r代码:

shinyUI(fluidPage(
    titlePanel(""),
    sidebarLayout(position = "right",
      sidebarPanel( selectInput("districtinput", "Select a district:",
                    list("Alfred Nzo")),
                    checkboxInput("addClinics", "Show Clinics", FALSE),
                    verbatimTextOutput("clickid",placeholder = TRUE)),
      mainPanel(leafletOutput("mymap"))
    )
  )
)

和我的server.r代码:

shinyServer(
  function(input,output,session){
      DMap<-reactive({
        data <- PlotAN
        if (input$districtinput=="Alfred Nzo"){data <- subset(PlotAN,"Alfred Nzo" %in% input$districtinput)}   
        return(data)
      })

      observe({
        if (input$addClinics){
          data<-clinics[clinics$district  %in%  input$districtinput]
          leafletProxy("mymap") %>% addMarkers(lat=data$lat, lng=data$lon, popup = data$clinic)
        }
       if (!input$addClinics){
         leafletProxy("mymap") %>% clearMarkers()
       }
      })

     observe({
       click<-input$map_marker_click
       print(click)
       if(!is.null(click$id)){
        text<-paste(click$id,": ",click$lat,";",click$lng)
        leafletProxy("mymap") %>% clearPopups() %>% showPopup(lat=click$lat,lng=click$lng,popup=text)
        output$clickid<-renderText({text})
       }
     })

    output$mymap <- renderLeaflet({
      leaflet() %>%
        addTiles() %>%
        addPolylines(data=DMap(),color = "black", weight = 1, smoothFactor = 0.5,
                  opacity = 1.0, 
                  highlightOptions = highlightOptions(color = "white", weight = 2,
                                                      bringToFront = TRUE))     

    })    
  }
)

现在我还没有将它链接到我想要显示的多边形数据,因为我想在确定如何使用它链接回多边形数据之前查看input$map_marker_click返回的内容。但input$map_marker_click甚至没有注册。

1 个答案:

答案 0 :(得分:0)

您只需使用input$mymap_marker_click即可。第一部分是mapId,而不仅仅是'map',因为你可以在一个应用程序中拥有多个地图。

此模式也适用于访问其他小部件上的事件,例如使用DT包创建的数据表。