Shiny animation - leaflet地图动画闪烁问题求助
解决方法
闪烁的核心原因是你在更新点位时先执行了clearShapes()和clearMarkers()清空全部图层,再重新添加点位,两个操作的时间差导致了视觉闪烁。你可以通过给动画点位指定固定layerId,仅针对性更新对应图层,跳过全量清空步骤解决问题。
修改后的完整可运行代码如下:
library(plyr) library(dplyr) library(tidyr) library(shiny) library(shinydashboard) library(leaflet) data <- data.frame(Date = seq(as.Date("2003-01-15"), as.Date("2003-03-17"), 1)) %>% mutate(Lon = -105.57, Lat = 64.86) ui <- navbarPage(" ", id = "nav", column(width = 4, uiOutput("animationSlider")), fluidRow(column(width = 8, leafletOutput("MapAnimate")))) server <- function(input, output, session) { output$animationSlider <- renderUI({ sliderInput("animationSlider2", "Animation period", min = min(data$Date), max = max(data$Date), value = min(data$Date), step = 1, animate = animationOptions(interval = 200, loop = FALSE)) }) IndividualAnimationPoints <- reactive({ req(input$animationSlider2) data %>% filter(Date == input$animationSlider2) }) output$MapAnimate <- renderLeaflet({ leaflet(data, options = leafletOptions(minZoom = 6)) %>% setView(lng = -105.6, lat = 64.86, zoom = 8) %>% addProviderTiles("Esri.WorldImagery", layerId = "basetile", options = providerTileOptions()) }) observe({ leafletProxy("MapAnimate", data = IndividualAnimationPoints()) %>% # 仅移除指定的动画点位图层,不清空全部图层 removeMarker(layerId = "anim_point") %>% addCircleMarkers(lng = ~Lon, lat = ~Lat, radius = 5, opacity = 1, fillOpacity = 1, color = "blue", layerId = "anim_point") }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者user2602640
相关产品推荐
相关产品推荐

