当我在R中的其他位置单击时,如何单击传单地图,创建标记,然后删除该标记

时间:2018-10-15 15:22:16

标签: r shiny r-leaflet

我创建了一个闪亮的应用程序,它在数据框中显示点的传单地图。

我想允许用户单击地图上的任意位置以获取附近点的一些信息,并在该点上留下标记。

他们可能想单击其他位置。当他们在其他位置单击时,我希望保留一个新标记,并删除旧标记。

我已经编写了一个可以正常工作的Shiny应用程序,但无法使其正常工作。

  1. 我尝试使用clearMarkers,但这会删除所有标记,包括我创建的标记和基础数据帧中的标记。

  2. 我尝试指定点击点的ID,以便clearMarkers可能只是删除该点,但我不知道谁能找到点击点的ID。

如何使它正常工作?

这是我的玩具代码:

library(shiny)
library(sp)
library(shinydashboard)
library(leaflet)

#### Make a spatial data frame 
lats<-c(37.38,39)
lons<-c(-94,-95,-96)
df<-data.frame(cbind(lons,lats))
coordinates(df)<-~lons+lats

#### Define UI for application that draws a histogram
ui <- dashboardPage(

    dashboardHeader(
    ),

    # Sidebar layout with input and output definitions 
    dashboardSidebar(
    ),

    # Main panel for displaying outputs 
    dashboardBody(
                     h2("My Map", align="center"),
                     h5("Click anywhere to draw a circle", align="center"),
                     leafletOutput("mymap", width="100%", height="500px")
        ),
    )



#### Define server logic required to draw a histogram
server <- function(input, output) {

    output$mymap <- renderLeaflet({
                 m = leaflet(df,width="100%",height="100%") %>% 
                 addTiles()    %>%
                 addCircleMarkers()
    })

    observeEvent(input$mymap_click, {

        click <- input$mymap_click
        text<-paste("Latitude ", round(click$lat,2), "Longtitude ", round(click$lng,2))

        proxy <- leafletProxy("mymap")

        ## This displays the pin drop circle
        proxy %>% 
            #clearPopups() %>%
            #clearMarkers(layerId=input$mymap_click$id) %>%
            #addPopups(click$lng, click$lat) %>%
            addCircles(click$lng, click$lat, radius=100, color="red")

    })


}

# Run the application 
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:2)

为此,您可以将group的{​​{1}}参数和addCircles一起使用-

clearGroup