leafletパッケージで地図上にランダムにマーカーを打ちつつそれを1秒おきに更新するshiny app

invalidateLaterで制御する感じか。あとはまともなリアルタイムデータソースにつなげばたのしそう。ものはこちら。


コードは以下でOK.

library("shiny")
library("leaflet")

ui <- bootstrapPage(
  tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
  leafletOutput("map", width = "100%", height = "100%")
)

server <- function(input, output, session) {
  output$map <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>%
      setView(139.766084, 35.681382, zoom=14)
  })
  
  observe({
    invalidateLater(1000, session)
    proxy <- leafletProxy("map")
    proxy %>% clearMarkers() %>%
      addMarkers(
        lng = runif(10, min=139.75, max=139.79),
        lat = runif(10, min=35.66,  max=35.7),
        layerId = paste0("marker", 1:10))
  })
}

shinyApp(ui, server)