从闪亮的传单中获取圈子ID,以便以后使用

时间:2019-05-08 11:36:22

标签: r shiny leaflet

我刚接触光泽,遇到了困难。我想要一张带有互动圈子的地图。单击时,这些圆圈将允许我查询SQL数据库以获取相应的数据并进行绘制。

尽管我能够将圈子信息打印到闪亮的ui,但我并没有设法将圈子信息变成变量。

这是示例代码:

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap"),
  verbatimTextOutput("marker")
)

server <- function(input, output, session) {
  output$mymap <- renderLeaflet({
    leaflet(data = mapStates, options = leafletOptions(minZoom = 3, maxZoom = 18)) %>% 
      addTiles() %>% 
      addProviderTiles(providers$Stamen.TonerLite,
                       options = providerTileOptions(noWrap = TRUE))%>%
      addCircleMarkers(data = data.frame(lat = 51, lng = 13,STANAME = "somewhere",STAID = "1" ), lng = ~lng, lat = ~lat,radius = 1, color = "red", fill = "red", popup = ~STANAME,layerId = ~STAID)
  })
  # here the circle info
  output$marker <- renderPrint(input$mymap_marker_click)
}

shinyApp(ui, server)

但是我无法在服务器函数中将标记的ID放入变量中。我尝试过:

input$mymap_marker_click$id

但是它告诉我,我需要一个被动的环境。如果我这样做:

renderPrint(input$mymap_marker_click)$id
  

错误:“关闭”类型的对象不可子集化

我不能在服务器端使用输出,但是我需要在服务器端使用此变量来进行查询和绘图。

我应该继续吗? 谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在Shiny中,您需要创建一个观察者以“监听”点击事件(或输入的任何事件/更改)并执行特定的响应。

不知道mapStates来自哪里,但删除地图图块,但是想法是相同的。

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap"),
  verbatimTextOutput("marker")
)

server <- function(input, output, session) {
  output$mymap <- renderLeaflet({
    leaflet(options = leafletOptions(minZoom = 3, maxZoom = 18)) %>% 
      addCircleMarkers(data = data.frame(lat = 51, lng = 13,STANAME = "somewhere",STAID = "1" ), lng = ~lng, lat = ~lat,radius = 1, color = "red", fill = "red", popup = ~STANAME,layerId = ~STAID)
  })
  # needs to be in a observer to "listen" for events
  observeEvent(input$mymap_marker_click, {
    output$marker <- renderPrint(input$mymap_marker_click$id)
  })
}

shinyApp(ui, server)

Live demo