gpt4 book ai didi

r - 如何单击传单 map ,创建标记,然后在单击 R 中的其他位置时删除该标记

转载 作者:行者123 更新时间:2023-12-02 20:13:54 24 4
gpt4 key购买 nike

我创建了一个 Shiny 的应用程序,它显示数据框中点的传单 map 。

我想让用户点击 map 上的任何地方来获取附近点的一些信息,并在那个点上留下一个标记。

他们可能想点击其他地方。当他们点击别处时,我希望留下一个新标记,并删除旧标记。

我已经编写了一个可以工作的 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)

最佳答案

为此,您可以使用 addCirclesgroup 参数和 clearGroup -

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 %>%
clearGroup("new_point") %>%
#clearMarkers(layerId=input$mymap_click$id) %>%
#addPopups(click$lng, click$lat) %>%
addCircles(click$lng, click$lat, radius=100, color="red", group = "new_point")

})


}

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

关于r - 如何单击传单 map ,创建标记,然后在单击 R 中的其他位置时删除该标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52819951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com