r - 使用 setView 更新 Leaflet Map Shiny Dashboard

标签 r shiny leaflet shinydashboard

我正在尝试创建一个 Shiny 的传单 map ,它会生成整个 map ,但会根据所选的输入放大特定坐标。如果我将其包含在渲染传单部分中,它会变得非常慢。因此我尝试使用观察。

编辑:添加了美国各州的示例。选择工作正常,但如何放大选择后的状态?

library(spData)
data(us_states)
us_states <- us_states 

# Add lat/long
library(dplyr)
library(sf)
us_geom <- as.data.frame(us_states %>% st_coordinates()) %>%
           group_by(L3) %>%
           summarise(lat = mean(Y), long = mean(X))
us_states$lat <- us_geom$lat
us_states$long <- us_geom$long
us_states$REGION <- as.character(us_states$REGION)
us_states$NAME <- as.character(us_states$NAME)
us_states2 <- as_Spatial(us_states)
us_states2 <- as.data.frame(us_states2@data)

# Add pallette for leaflet
pal <- colorBin("RdYlBu", domain = c(0,1000000), bins = 12, reverse = 
                                                      TRUE)

ui <- dashboardPage(
      skin = "red",
    dashboardHeader(title = "Dashboard"),
    dashboardSidebar(
    selectInput('select_region', 'Region: ', choices = 
             unique(as.character(us_states$REGION))),
    uiOutput("select_state")
       ),
   dashboardBody(
    fluidRow(column(width = 12, leafletOutput(outputId = "mymap")))
   )
)

server <- function(input, output) {

     output$select_state <- renderUI({
         selectInput("User1", "State: ", choices = 
           as.character(us_states2[us_states2$REGION==input$select_region,
                                                            "NAME"]))
     })



     data_input <- reactive({
                     us_states  %>% 
                     dplyr::filter(REGION == input$select_region &
                               NAME == input$User1 ) 
     })

     data_input2 <- reactive({
                     us_states2  %>% 
                     dplyr::filter(REGION == input$select_region &
                               NAME == input$User1 ) 
     })


     output$mymap <- renderLeaflet({
                   leaflet(us_states) %>%
                   addTiles() %>%
                   addPolygons(
                    fillColor = ~pal(total_pop_10))
     })

     observe({
          leafletProxy("mymap")   %>%
              setView(
              lng = as.numeric(data_input2() %>% select(long)),
              lat = as.numeric(data_input2() %>% select(lat)),
              zoom = 7)
     })


}

shinyApp(ui, server)

如果您删除观察部分但不放大该州,仅显示整个 map ,则它会起作用。我怎样才能正确添加这个?

最佳答案

对于寻找答案的其他人,我能找到的唯一方法是向 UI 添加一个操作按钮并从那里调用它:

ui <- dashboardPage(
  skin = "red",
  dashboardHeader(title = "Dashboard"),
  dashboardSidebar(
    selectInput('select_region', 'Region: ', choices = 
    unique(as.character(us_states$REGION))),
    uiOutput("select_state"),
    actionButton("update_view", "update_view")
  ),
  dashboardBody(
    fluidRow(column(width = 12, leafletOutput(outputId = "mymap")))
  )

)

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

   output$select_state <- renderUI({
   selectInput("User1", "State: ", choices = 
     as.character(us_states2[us_states2$REGION==input$select_region,
                                                            "NAME"]))
  })


   data_input <- reactive({
      us_states  %>% 
      dplyr::filter(REGION == input$select_region &
                    NAME == input$User1 ) 
  })

  data_input2 <- reactive({
        us_states2  %>% 
          dplyr::filter(REGION == input$select_region &
                        NAME == input$User1 ) 
  })


  output$mymap <- renderLeaflet({
        leaflet(us_states) %>%
         addTiles() %>%
         addPolygons(
         fillColor = ~pal(total_pop_10)) }) 


  observeEvent(input$update_view, {

      leafletProxy("mymap", session)   %>%
             setView(
               lng = as.numeric(data_input2() %>% select(long)),
               lat = as.numeric(data_input2() %>% select(lat)),
               zoom = 7  )
 })


}

shinyApp(ui, server)

当放大到更详细的 map 时,与以前相比,它可以立即工作

关于r - 使用 setView 更新 Leaflet Map Shiny Dashboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58181946/

相关文章:

r - 使用开源 Shiny 服务器时,我的图标不会显示在我的应用程序的浏览器选项卡上

javascript - 当我使用传单工具显示到 wordpress 的 map 时出现错误(未捕获错误 : Map container not found)

r - 如何使用长标签保持ggplot的大小

javascript - 在 Shiny 中修改文字大小

r - 选中时突出显示 R Shiny 按钮的边框或颜色

r - 通过 R Shiny 中的 Leaflet 仅在 slider 上显示选定日期的数据点

javascript - 点击功能的传单

r - 提取向量的每个第 n 个元素

r - R 上的 ggplot 问题 : code is correct but I keep receiving the error "Must request at least one color from a hue palette"

r - 在R中使用带有facet_wrap的ggplot2显示多轴标签