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

问题描述 投票:0回答:1

我对闪亮还很陌生,我面临着一个困难。我想要一张带有互动圈的地图。单击时,这些圆圈将允许我查询 SQL 数据库以获取相应的数据,从而绘制图表。

虽然我可以将其打印到闪亮的用户界面,但我无法将圆圈信息放入变量中。

这是示例代码:

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

错误:“闭包”类型的对象不可取子集

我无法使用服务器端的输出,但我需要服务器端的这个变量来执行查询和绘图。

我该如何进行?

r shiny r-leaflet
1个回答
2
投票

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

现场演示

© www.soinside.com 2019 - 2024. All rights reserved.