блестящие листовки с надписями в зависимости от уровня масштабирования - PullRequest
0 голосов
/ 29 июня 2019

Я хочу отображать метки моих маркеров в зависимости от уровня масштабирования. На основании (https://rstudio.github.io/leaflet/shiny.html) я пытался использовать «input $ MAPID_zoom». В моем примере метки, хранящиеся в location_name, должны отображаться, когда уровень масштабирования (mapscale) ниже 6.

Что я пробовал:

library(shiny)
library(leaflet)

 # my data
df <- data.frame(
  location_name = c('S1', 'S2'),
  lng = c(-1.554136,  -2.10401),
  lat = c(47.218637, 47.218637), 
  stringsAsFactors = FALSE)


# UI
 ui <- shinyUI(fluidPage(
  leafletOutput('map')

  ))

# server 

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

  mapscale <-  observe({
    input$map_zoom   # get zoom level
  })


  output$map <- renderLeaflet({
    leaflet() %>%
    addTiles() %>% 
    addMarkers(data=df, lng = ~lng, lat = ~lat,
               label =~if(mapscale<6, location_name))
})

})

shinyApp(ui = ui, server = server)

1 Ответ

2 голосов
/ 29 июня 2019

Несколько замечаний к вашему коду, если хотите. Если вы включаете зум в реактивную функцию, ссылайтесь на нее как mapscale(). Используйте обычный оператор if в R и ~ перед переменной. Тогда с тобой все будет в порядке.

Воспроизводимый пример:

library(shiny)
library(leaflet)

df <- data.frame(
  location_name = c('S1', 'S2'),
  lng = c(-1.554136,  -2.10401),
  lat = c(47.218637, 47.218637), 
  stringsAsFactors = FALSE
)


ui <- shinyUI(
  fluidPage(
    leafletOutput(outputId = 'map')
  )
)

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

  output$map <- renderLeaflet({
    leaflet() %>%
      addTiles()
  })

  observeEvent(
    eventExpr = input$map_zoom, {
      print(input$map_zoom)           # Display zoom level in the console
      leafletProxy(
        mapId = "map", 
        session = session
      ) %>% 
        clearMarkers() %>%
        addMarkers(
          data = df, 
          lng = ~lng,
          lat = ~lat,
          label = if(input$map_zoom < 6) ~location_name
      )
    }
  )


})

shinyApp(
  ui = ui, 
  server = server
)
...