2017-01-22 7 views
0

Я пытаюсь выбрать место из списка, а затем перейти к карте, предоставленной пакетом листовка.Как настроитьView для выбора из списка в selectInput

Я попытался это:

Во-первых, создать переменные в пользовательском интерфейсе

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) 
    }) 

ответ

1

Используйте data.frame для хранения lat/lon для каждого местоположения, затем используйте observeEvent и обновите буклет при изменении выбора.

Чтобы обновить листовку в блестящей, вы должны использовать leafletProxy обновить карту

Вот рабочий пример

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) 
+0

именно то, что мне нужно. – NUForever