Обновление данных при масштабировании с листовкой (блестящий) - PullRequest
1 голос
/ 07 февраля 2020

Я создаю блестящее приложение, которое содержит карту листовки с маркерами на ней и таблицу с информацией о каждом маркере рядом с ним. Когда я увеличиваю карту листовки, как мне обновить таблицу, чтобы отображать только маркеры, все еще видимые на карте листовки?

# Minimum Viable Example


library(shiny)
library(leaflet)
library(DT)
data(quakes)

# Define UI
ui <- fluidPage(
    # leaflet box
    column(
        leafletOutput("mymap"),
        width = 8
    ),
    #data table box
    column(
        DT::dataTableOutput("table"),
        width = 4
    )
)

# Define server logic 
server <- function(input, output) {

    # leaflet map
    output$mymap <- renderLeaflet({
        # Show first 20 rows from the `quakes` dataset
        leaflet(data = quakes[1:20,]) %>% addTiles() %>%
            addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag))
    })

    # data table
    output$table = DT::renderDataTable({
        quakes
    })

}

# Run the application 
shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 07 февраля 2020

Используйте событие input$mymap_bounds для фильтрации данных. В вашем примере добавьте library(dplyr) и измените output$table на

    output$table = DT::renderDataTable({
      if (isTruthy(input$mymap_bounds)) {
        bounds = input$mymap_bounds
        quakes %>% filter(
          between(long, bounds$west, bounds$east),
          between(lat, bounds$south, bounds$north)
        )
      } else
        quakes
    })

Обратите внимание, что это фильтрует всю таблицу quakes, а не 20 отображаемых элементов. Изменить, чтобы удовлетворить. Подробности смотрите в разделе «События» на этой странице: https://rstudio.github.io/leaflet/shiny.html

...