在不添加和删除的情况下更新传单提供者磁贴选项

Update leaflet provider tile options without adding and removing

我在闪亮的应用程序中使用传单来显示我的数据以及几个基础层。其中一层是由 NASA GIBS 提供的非常好的每日 MODIS 卫星图像。 问题是我不知道如何优雅地更新 NASA 图像的日期。

下面是我的第一种方法的示例。

library(shiny)
library(leaflet)

ui <- fluidPage(
        dateInput("date", label = "Date"),
           leafletOutput("map", width = "600px")
)

server <- function(input, output, session) {

  output$map <- renderLeaflet({
    leaflet() %>%
      addProviderTiles("Esri.WorldGrayCanvas", group = "Gray") %>%
      fitBounds(-130, 23, -60, 50)
  })

  observe({

    leafletProxy("map", session) %>%
      addProviderTiles("NASAGIBS.ModisTerraTrueColorCR", group = 'MODIS',
                       options = providerTileOptions(time = input$date)) %>%
      addLayersControl(baseGroups = c("Gray", "MODIS"))
  })

}

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

这 "works," 但如果您在灰色地图上多次更改日期(及时倒退,因为未来的卫星数据不存在)然后将视图切换到MODIS。您将看到您选择的每个日期的磁贴依次加载。

我尝试的另一种方法是在初始加载时添加 MODIS 瓦片:

server_v2 <- function(input, output, session) {

  output$map <- renderLeaflet({
    leaflet() %>%
      addProviderTiles("Esri.WorldGrayCanvas", group = "Gray") %>%
      addProviderTiles("NASAGIBS.ModisTerraTrueColorCR", group = 'MODIS',
                       options = providerTileOptions(time = input$date)) %>%
      addLayersControl(baseGroups = c("Gray", "MODIS")) %>%
      fitBounds(-130, 23, -60, 50)
  })

  observe({

    leafletProxy("map", session) %>%
      addProviderTiles("NASAGIBS.ModisTerraTrueColorCR", group = 'MODIS',
                       options = providerTileOptions(time = input$date))

  })

}

这也 "works," 并解决了加载所有过去选定日期的问题,但会产生不同的问题。在这种情况下,切换日期现在将导致地图恢复到其原始默认状态(灰色底图和原始缩放级别),这确实阻碍了使用。

我真正想要的(我认为)是一个 updateProviderTiles 函数,但传单 R 包中不存在该函数。您能看到解决方案或解决方法吗?

Joe Cheng 在我将问题发布到 Github 时提供了答案:

如果您使用 layerId 参数调用 addProviderTiles(仅组成一个标识符),那么在添加新的之前,所有具有相同 layerId 的 addProviderTiles 都会被删除。

有关详细信息,请参阅 http://rstudio.github.io/leaflet/shiny.html#understanding-layer-ids