更新传单提供程序磁贴选项,而无需添加和删除

时间:2019-08-29 18:34:06

标签: r shiny leaflet r-leaflet

我在一个闪亮的应用程序中使用传单来显示我的数据以及几个基础层。其中一层是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)

这是“可行的”,但是如果您在灰色地图上更改日期几次(时间倒退,因为将来的卫星数据不存在,然后又将视图切换到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))

  })

}

这也“有效”,并解决了所有过去选定日期加载的问题,但是产生了另一个问题。在这种情况下,更改日期现在将使地图恢复为其原始默认状态(灰色底图和原始缩放级别),这确实会妨碍使用。

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

1 个答案:

答案 0 :(得分:0)

当我向Github发布问题时,Joe Cheng提供了答案:

如果您使用layerId参数调用addProviderTiles(只是组成一个标识符),则在添加新的同一个layerId之前的所有addProviderTiles都将被删除。

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