在不添加和删除的情况下更新传单提供者磁贴选项
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。
我在闪亮的应用程序中使用传单来显示我的数据以及几个基础层。其中一层是由 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。