r - 如何 setView 从 selectInput 中的列表中选择

标签 r shiny leaflet

我正在尝试从列表中选择一个地点,然后使用传单包提供的 map 前往该地点。

我尝试过这个:

首先,在用户界面上创建变量

vars <- c(
  "LAS CRUZADAS" = "lc",
  "PUENTE SAN ISIDRO" = "psi",
  "FUNDO EL PROGRESO" = "fep",
  "CALLE SANTA MARÍA" = "csm",
  "ASENTAMIENTO NOGALES" = "an"
)

然后设置面板

navbarPage("PLATAFORMA NAUTILUS", id="nav",

    absolutePanel(id = "controls", class = "panel panel-default", fixed = TRUE,
                  draggable = TRUE, top = 60, left = "auto", right = 20, bottom = "auto",
                  width = 330, height = "auto",

                  h2(""),


                  selectInput("color", "Seleccionar Estación", vars)
                  ),
)

在服务器中,在相应位置添加标记

  output$mymap <- renderLeaflet({
    leaflet() %>% addTiles() %>%
                                #h            v
      addCircleMarkers(lng=-71.294563, lat=-32.933843, color="blue" ,popup="LAS CRUZADAS") %>%
      addCircleMarkers(lng=-71.240000, lat=-32.900000, color="blue" ,popup="PUENTE SAN ISIDRO") %>%
      addCircleMarkers(lng=-71.226667, lat=-32.832778, color="blue" ,popup="CALLE SANTA MARÍA") %>%
      addCircleMarkers(lng=-71.183889, lat=-32.733333, color="blue" ,popup="ASENTAMIENTO NOGALES") %>%
      addCircleMarkers(lng=-71.221667, lat=-32.866111, color="blue" ,popup="FUNDO EL PROGRESO") %>%

      setView(lng=-71.294563, lat=-32.933843, zoom=11) 
  })

最佳答案

使用 data.frame 存储每个位置的纬度/经度,然后使用 observeEvent 并在选择更改时更新传单。

要更新 Shiny 的传单,您应该使用leafletProxy来更新 map

这是一个工作示例

library(shiny)
library(leaflet)

df_vars <- data.frame(location = c("LAS CRUZADAS","ASENTAMIENTO NOGALES"),
                                            lat = c(-32.9338, -32.8661),
                                            lon = c(-71.2945, -71.2216)
)

ui <- fluidPage(

    selectInput(inputId = "myLocations", label = "Locations",
                            choices = df_vars$location),

    leafletOutput(outputId = "mymap")

)

server <- function(input, output){

    output$mymap <- renderLeaflet({

        leaflet() %>% 
            addTiles() %>%
            addCircleMarkers(lng=-71.294563, lat=-32.933843, color="blue" ,popup="LAS CRUZADAS") %>%
            addCircleMarkers(lng=-71.221667, lat=-32.866111, color="blue" ,popup="FUNDO EL PROGRESO")
    })

    observeEvent({
        input$myLocations
        },{
            selectedLocation <- df_vars[df_vars$location == input$myLocations, c("lat","lon")]

            leafletProxy(mapId = "mymap") %>%
                setView(lng = selectedLocation$lon, lat = selectedLocation$lat, zoom = 11)
        })

}

shinyApp(ui, server)

关于r - 如何 setView 从 selectInput 中的列表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797311/

相关文章:

r - 如何在r中的白色背景表格中添加网格

r - 如何根据 R 中 data.table 中具有对称值的两列删除某些行?

r - 在 Rmd/RStudio 中与 cat 命令结合使用时不打印数据表

r - 如何在 R 中导入 SVG 文件?

R Shiny : Use Onclick Option of Actionbutton on the Server Side

r - 将包描述提取为 R 中的字符串

javascript - 传单 0.7 : Disable mouse clicks for a polyline or a polygon

javascript - 具有模糊轮廓的传单多边形

shiny - 如何改变 Shiny 导航栏中的填充

javascript - 使用 mapbox 和 leaflet 获取 "Uncaught TypeError: Cannot read property ' lat' of undefined"