2016-02-08 38 views
4

中一個閃亮的程序,我已經能夠實現所有我看過的功能。只有一次,它已被點擊取消標記對象使用RStudio Leaflet package[R傳單(CRAN) - 如何註冊點擊關閉標記

更具體地說,在單擊任何標記之前,輸入$ map_click_id值設置爲NULL。點擊標記後,它會更新該標記的數據(ID,lat,lng,nonce)。我想設置地圖,以便當用戶點擊地圖上的哪個不是標記的任何區域,另一個標記被點擊,直到輸入$ map_click_id重置爲NULL。

我已經嘗試了很多解決方案,比如標記點擊和地圖點擊的點擊次數,但標記點擊變量一旦設置爲非NULL值,每次映射都會更新不管它是否在標記上,所以這不起作用。

任何幫助在這裏將不勝感激!以下是一個非常簡單的可重現示例。在這種情況下,我想爲被點擊時,它的標記信息打印到控制檯,併爲NULL點擊地圖上的任何非標記區域時,要返回到控制檯。

library(leaflet) 
library(shiny) 

# set basic ui 
ui <- fluidPage(
    leafletOutput("map") 
) 

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

    # produce the basic leaflet map with single marker 
    output$map <- renderLeaflet(
    leaflet() %>% 
     addProviderTiles("CartoDB.Positron") %>% 
     addCircleMarkers(lat = 54.406486, lng = -2.925284) 

) 

    # observe the marker click info and print to console when it is changed. 
    observeEvent(input$map_marker_click, 
       print(input$map_marker_click) 
       ) 

}) 


shinyApp(ui, server) 

這似乎是同樣的問題,但asked here由於沒有回答這一點,我想我會再試一次。

回答

6

你可以使用一個reactiveValues存儲點擊標記和重置每當用戶點擊地圖背景:

server <- shinyServer(function(input, output) { 
    data <- reactiveValues(clickedMarker=NULL) 
    # produce the basic leaflet map with single marker 
    output$map <- renderLeaflet(
    leaflet() %>% 
     addProviderTiles("CartoDB.Positron") %>% 
     addCircleMarkers(lat = 54.406486, lng = -2.925284)  
) 

    # observe the marker click info and print to console when it is changed. 
    observeEvent(input$map_marker_click,{ 
       data$clickedMarker <- input$map_marker_click 
       print(data$clickedMarker)} 
) 
    observeEvent(input$map_click,{ 
       data$clickedMarker <- NULL 
       print(data$clickedMarker)}) 
})