【问题标题】:Remove marker in R shiny app created for reactive dataframe删除为反应性数据框创建的 R 闪亮应用程序中的标记
【发布时间】:2019-12-05 17:25:43
【问题描述】:

在我闪亮的应用程序中,数据是从 PostgreSQL 数据库加载的。数据库可以在会话期间从应用程序更新,因此数据被加载到反应数据帧。它具有经度/纬度,并显示在传单地图上。我希望通过单击它来删除地图上的标记。如果没有反应性数据,它会以适当的方式工作。 我期待帮助了解问题所在。示例代码如下(removeMarker 后标记未删除)

library(shiny)
library(leaflet)
library(dplyr)

ui<-fluidPage(
  leafletOutput("map1")
)

server <- function(input,output,session){
  getPoints0 <- function(){
    mydf <- head(quakes,10)
    mydf <- mydf %>% mutate(myid = row_number())
    return(mydf)
  }

  df<-reactiveVal(getPoints0());

  output$map1 <- renderLeaflet({
   leaflet(data=df()) %>%
      addTiles() %>%
      addMarkers(
        lng = ~long,
        lat = ~lat,
        layerId = ~myid,
        label = paste0("LayerId = ",df()$myid))
  })

  observe(
    leafletProxy("map1") %>%
      removeMarker(input$map1_marker_click$id)
  )
}
shinyApp(ui = ui,server = server)

【问题讨论】:

    标签: r shiny r-leaflet


    【解决方案1】:

    我查看了 ?removeMarker 文档并注意到 layerId 参数要求提供字符向量 -

    layerId:字符向量;要移除的项目的图层 ID

    我做了以下更改,它对我有用 -

      output$map1 <- renderLeaflet({
        leaflet(data=df()) %>%
          addTiles() %>%
          addMarkers(
            lng = ~long,
            lat = ~lat,
            layerId = ~as.character(myid), # here's the change
            label = paste0("LayerId = ", df()$myid))
      })
    

    您还可以在getPoints0() 的上游进行更改,即myid = as.character(row_number()),以便myid 始终是character 下游。

    PS:很好的可重复问题!

    【讨论】:

    • 谢谢!有用!没有反应性的情况下不崩溃是一种魔力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2014-10-04
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多