【问题标题】:R Auto Zoom Updated leafletProxy Map object in ShinyR自动缩放更新了Shiny中的leafletProxy Map对象
【发布时间】:2018-10-02 00:00:07
【问题描述】:

我正在为 Shiny 中的一些地图试验 leaflet 包。我希望能够拥有一个数据将更改并随后重新映射的基本地图。但是,我正在尝试使用 leafletProxy 函数,其中有一个底图,我只是更改添加的数据点。所有这些都有效,但是地图不会缩放到数据点位置。它保持在最远的缩放。

重现问题的代码:

library(shiny)
library(leaflet)

r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()

ui <- fluidPage(
  leafletOutput("mymap"),
  p(),
  actionButton("goButton", "New Points")
)

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

  output$mymap <- renderLeaflet({
    leaflet() %>%
      addProviderTiles("Stamen.TonerLite",
                       options = providerTileOptions(noWrap = TRUE)
      )
  })

  observeEvent(input$goButton, {
    points <- cbind(rnorm(40) * 2 + 13, rnorm(40) + 48)

    leafletProxy('mymap', session) %>%
      clearMarkers() %>%
      addMarkers(data = points)
  })
}

shinyApp(ui, server)

我希望地图在添加新点后自动放大。

【问题讨论】:

    标签: r shiny leaflet


    【解决方案1】:

    尝试在leafletProxy() 中添加参数“fitBounds”

    leafletProxy('mymap', session) %>%
      clearMarkers() %>%
      addMarkers(data = points) %>%
      fitBounds(lng1 = max(points$long),lat1 = max(points$lat),
                lng2 = min(points$long),lat2 = min(points$lat))
    

    【讨论】:

      【解决方案2】:

      我修改了 G. Cocca 的答案(主要是通过添加“点”的数据框)来得到这个:

      library(shiny)
      library(leaflet)
      
      r_colors <- rgb(t(col2rgb(colors()) / 255))
      names(r_colors) <- colors()
      
      ui <- fluidPage(
        leafletOutput("mymap"),
        p(),
        actionButton("goButton", "New Points")
      )
      
      server <- function(input, output, session) {
      
        output$mymap <- renderLeaflet({
          leaflet() %>%
            addProviderTiles("Stamen.TonerLite",
                             options = providerTileOptions(noWrap = TRUE)
            )
        })
      
        observeEvent(input$goButton, {
          points <- data.frame("long" = rnorm(40) * 2 + 13, 
                                  "lat" = rnorm(40) + 48)
      
      
          leafletProxy('mymap', session) %>%
            clearMarkers() %>%
            addMarkers(data = points) %>%
            fitBounds(lng1 = max(points$long),lat1 = max(points$lat),
                      lng2 = min(points$long),lat2 = min(points$lat))
      
      
        })
      }
      
      shinyApp(ui, server)
      

      【讨论】:

      • 您在observeEvent 中调用了两次leafletProxy。您可以删除第一个代码块。
      • 优秀的收获,@SeGa。我修改了。
      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多