Нажмите на маркер листовки и получите информацию

Основываясь на комментариях ниже, я явно выделил широту и долготу во фрейме пространственных данных.

Добавлен

addCircleMarkers( ~ longitude, ~ latitude)

Добавлен

observeEvent(input$map_marker_click, { 
    p <- input$map_marker_click
    print(p)
  })

Тем не менее, когда я нажимаю на маркеры, в консоли ничего не отображается, так что я все еще в замешательстве.

Пересмотренный Кодекс

# Click on circle and get info

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap"),
  fluidRow(verbatimTextOutput("click_text"))
)

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

  # Create tree geometries
  tree_1g <- st_point(c(-79.2918671415814, 43.6760766531298))
  tree_2g <- st_point(c(-79.4883669334101, 43.6653747165064))
  tree_3g <- st_point(c(-79.2964680812039, 43.7134458013647))

  # Create sfc object with multiple sfg objects
  points_sfc <- st_sfc(tree_1g, tree_2g, tree_3g, crs = 4326)

  # Create tree attributes
  data <- data.frame (
    layerId = c("001", "002", "003"),
    address = c(10, 20, 30),
    street = c("first", "second", "third"),
    tname = c("oak", "elm", "birch"),
    latitude = c(43.6760766531298, 43.6653747165064, 43.7134458013647),
    longitude = c(-79.2918671415814, -79.4883669334101, -79.2964680812039)  
)

  tree_data <- st_sf(data, geometry = points_sfc)

  output$mymap <- renderLeaflet({
    leaflet(data = tree_data) %>%
      addProviderTiles(providers$Stamen.Watercolor) %>%

      # Centre the map in the middle of Toronto
      setView(lng = -79.384293, 
              lat = 43.685, 
              zoom = 11) %>% 

      addCircleMarkers( ~ longitude, ~ latitude)
  })

  observeEvent(input$map_marker_click, { 
    p <- input$map_marker_click
    print(p)
  })


}

shinyApp(ui, server)

Когда пользователь нажимает на каждый маркер, я хочу, чтобы под картой отображалась некоторая релевантная информация. Основываясь на этом более раннем сообщении, я попробовал это. Однако, когда я нажимаю на маркер, ничего не происходит. Возможно, это связано с тем, что я не понимаю, как связать маркеры с идентификаторами слоя?

# Click on circle and get info

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap"),
  fluidRow(verbatimTextOutput("click_text"))
)

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

  # Create tree geometries
  tree_1g <- st_point(c(-79.2918671415814, 43.6760766531298))
  tree_2g <- st_point(c(-79.4883669334101, 43.6653747165064))
  tree_3g <- st_point(c(-79.2964680812039, 43.7134458013647))

  # Create sfc object with multiple sfg objects
  points_sfc <- st_sfc(tree_1g, tree_2g, tree_3g, crs = 4326)

  # Create tree attributes
  data <- data.frame (
    layerId = c("001", "002", "003"),
    address = c(10, 20, 30),
    street = c("first", "second", "third"),
    tname = c("oak", "elm", "birch")
)

  tree_data <- st_sf(data, geometry = points_sfc)

  output$mymap <- renderLeaflet({
    leaflet(data = tree_data) %>%
      addProviderTiles(providers$Stamen.Watercolor) %>%

      # Centre the map in the middle of Toronto
      setView(lng = -79.384293, 
              lat = 43.685, 
              zoom = 11) %>% 

      addCircleMarkers()
  })

  observe({
    click <- input$map_marker_click
    if(is.null(click))
      return()

    address <- paste("Address: ", click$street)
    output$click_text <- renderText({
      address
    })

  })

}

shinyApp(ui, server)

person ixodid    schedule 16.07.2018    source источник
comment
возможно, дубликат: stackoverflow.com/a/42798668/5977215   -  person SymbolixAU    schedule 16.07.2018
comment
addCircleMarkers имеет аргументы popup и popupOptions для отображения всплывающих ярлыков, когда пользователь нажимает на них. Вам, вероятно, будет намного проще использовать их, чем возиться с observe   -  person Conor Neilson    schedule 16.07.2018
comment
Мне нужно, чтобы информация использовалась на боковой панели, а не во всплывающем окне. Я просмотрел ссылку, упомянутую SymbolixAU, и изменил свой вопрос, но все еще не могу получить информацию из события щелчка.   -  person ixodid    schedule 16.07.2018
comment
Есть ли способ получить информацию из всплывающего окна, когда вы щелкаете круговой маркер?   -  person AyeTown    schedule 06.08.2019


Ответы (1)


Когда вы «наблюдаете» что-то на карте, вам нужно ссылаться на карту, которую вы наблюдаете. Вы делаете это, используя эту структуру

output$<map_id>_event_to_observe

Итак, в вашем примере ваш map_id равен mymap, поэтому вам нужно использовать

observeEvent(input$mymap_marker_click, { 
    p <- input$mymap_marker_click
    print(p)
  })
person SymbolixAU    schedule 16.07.2018
comment
Спасибо. Теперь p ‹- input возвращает $ mymap_marker_click, содержащий $ lat, $ long и $ .nonce. Как связать эти значения с атрибутами в моем фрейме данных. Например, как определить улицу выбранного круга? - person ixodid; 17.07.2018
comment
@ixodid В ответе, на который я ссылался в своем комментарии под вашим вопросом, говорится, что значение id относится к layerId, которое вы указываете в функции построения формы. Вам необходимо указать значение layerId в функции построения графика. Он будет возвращен вам как id в событии щелчка. Затем вы используете это для связи со своими данными. - person SymbolixAU; 17.07.2018
comment
В ПОРЯДКЕ. Я получаю это сейчас. Спасибо за терпеливость. - person ixodid; 17.07.2018
comment
Есть ли способ получить информацию из всплывающего окна, когда вы щелкаете круговой маркер? - person AyeTown; 06.08.2019
comment
@ACE Это будет зависеть от того, как вы заполняете всплывающее окно. Когда вы наблюдаете за щелчком, вы можете получить обратно значение id, которое будет указывать на id в ваших данных. Если всплывающая информация представляет собой столбец данных, вы можете получить ее отсюда. Для более подробного ответа вам, вероятно, следует задать новый вопрос. - person SymbolixAU; 06.08.2019