【问题标题】:Zoom leaflet map to default in Rshiny在 R Shiny 中将传单地图缩放为默认值
【发布时间】:2015-12-30 01:37:14
【问题描述】:

无论如何添加图层控件或按钮来重置地图并返回初始位置。例如,当您在探索地图并放大时,您想缩小以返回初始阶段。

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap")

)

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

outline <- quakes[chull(quakes$long, quakes$lat),]

output$mymap <- renderLeaflet({ leaflet(quakes) %>%
  # Base groups
  addTiles(group = "OSM (default)") %>%
  addProviderTiles("Stamen.Toner", group = "Toner") %>%
  addProviderTiles("Stamen.TonerLite", group = "Toner Lite") %>%
  # Overlay groups
  addCircles(~long, ~lat, ~10^mag/5, stroke = F, group = "Quakes") %>%
  addPolygons(data = outline, lng = ~long, lat = ~lat,
              fill = F, weight = 2, color = "#FFFFCC", group = "Outline") %>%
  # Layers control
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Toner Lite"),
    overlayGroups = c("Quakes", "Outline"),
    options = layersControlOptions(collapsed = FALSE)
    )

  })
}

shinyApp(ui, server)

【问题讨论】:

    标签: r leaflet shiny


    【解决方案1】:

    您可以在没有任何 JavaScript 代码的情况下执行此操作,方法是使用 leafletProxysetView 函数在单击 a 按钮时更改地图。

    这是一个例子:

    library(shiny)
    library(leaflet)
    
    ui <- fluidPage(
      leafletOutput("mymap"),
      actionButton("reset_button", "Reset view")
    
    )
    
    server <- function(input, output, session) {
      initial_lat = -23.079
      initial_lng = 178.15
      initial_zoom = 4
    
      output$mymap <- renderLeaflet({ leaflet(quakes) %>% 
                                        setView(lat = initial_lat, lng = initial_lng, zoom = initial_zoom) %>%
                                        addTiles(group = "OSM (default)") %>%
                                        addProviderTiles("Stamen.Toner", group = "Toner") %>%
                                        addProviderTiles("Stamen.TonerLite", group = "Toner Lite")})                                 
    
    
      observe({
        input$reset_button
        leafletProxy("mymap") %>% setView(lat = initial_lat, lng = initial_lng, zoom = initial_zoom)
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 如果你想要默认视图怎么办。取决于标记。而不是初始化 initial_lat 和 initial_long ?
    • @celianou,你不能使用leafletProxy,但你可以参考renderLeaflet块内的重置按钮,然后使用leafet(...) %&gt;% clearBounds()重置为初始设置。
    【解决方案2】:

    是的,你可以。看看传单的documentation

    修改地图状态的方法 setView()

    使用给定的 > 动画选项设置地图视图(地理中心和缩放)。

    所以我要做的是在ui.R 中包含一个actionButton 和一个激活.js 功能的observeEvent()。 Shiny 可以与.js 文件进行通信,您可以阅读here

    一个你必须适应你的代码的例子:

    ui.R
    actionButton("goButton", "Go!"),
    p("Click the button to update the view.")
    
    server.R
        observeEvent(input$goButton, {
        session$sendCustomMessage(type = "myCallbackHandler", Yourlatlng) //send to .js code snippet
    })
    
    
    //I would create a www file in the folder where server.R and ui.R is. By default shiny looks into this folder
     .js file
    Shiny.addCustomMessageHandler("myCallbackHandler",function(Yourlatlng) {
    var latlng = Yourlatlng;
    setView(latlng, center,...) //check documentation for your specifcations
    });
    

    【讨论】:

      猜你喜欢
      • 2016-06-03
      • 1970-01-01
      • 2016-05-01
      • 2016-04-11
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2015-04-15
      相关资源
      最近更新 更多