получить круг номер из листовки в блестящей для последующего использования - PullRequest
1 голос
/ 08 мая 2019

Я новичок в блеске и столкнулся с трудностью. Я хочу иметь карту с интерактивными кругами. При щелчке эти круги позволят мне сделать запрос к базе данных 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)

но мне не удается получить идентификатор маркера в переменную в функции сервера. Я попробовал:

input$mymap_marker_click$id

Но это говорит мне, что мне нужен реактивный контекст. Если я сделаю:

renderPrint(input$mymap_marker_click)$id

Ошибка: объект типа 'замыкание' не может быть подмножеством

Я не могу использовать выходные данные на стороне сервера, но мне нужна эта переменная на стороне сервера, чтобы выполнить запрос и графики.

Я должен продолжить? Спасибо за вашу помощь.

1 Ответ

1 голос
/ 08 мая 2019

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

Живая демоверсия

...