Select 并取消选择 Shiny/Leaflet 中的多段线
Select and Deselect Polylines in Shiny/Leaflet
我以 Lauren 的身份解决了我的问题。
唯一的区别是我使用折线而不是多边形。我想 select 多条折线并在再次单击时取消 select 它们。但它不起作用..它从 table 中删除了 reselected,但不从地图中删除,并且在从我的 selected 行中删除了一行后,我不能 select 它了。
有人可以帮帮我吗!
这是我的代码:
library(shiny)
library(leaflet)
library(geojsonio)
url <- "pathTogeojson"
geojson <- geojsonio::geojson_read(url, what = "sp")
shinyApp(
ui <- fluidRow(
leafletOutput("map")),
server <- function(input, output, session) {
click_list <- reactiveValues(ids = vector())
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng=16.357795000076294, lat=48.194883921677935, zoom = 15) %>%
addPolylines(data=geojson, layerId = geojson@data$name_1, group = "selected", color="red", weight=3,opacity=1)
})
observeEvent(input$map_shape_click, {
click <- input$map_shape_click
proxy <- leafletProxy("map")
click_list$ids <- c(click_list$ids, click$id)
sel_lines <- geojson[geojson@data$name_1 %in% click_list$ids, ]
if(click$id %in% sel_lines@data$id)
{
nameMatch <- sel_lines@data$name_1[sel_lines@data$id == click$id]
click_list$ids <- click_list$ids[!click_list$ids %in% click$id]
click_list$ids <- click_list$ids[!click_list$ids %in% nameMatch]
proxy %>% removeShape(layerId = click$id)
}
else
{
proxy %>% addPolylines(data = sel_lines, layerId = sel_lines@data$id, color="#6cb5bc", weight=5,opacity=1)
}
})
})
我自己找到了解决方案..我的数据和我的不理解是问题所在。它仅在所有使用的列都是类型 character
时才有效...所以我必须使用 as.character()
进行类型转换
我以 Lauren 的身份解决了我的问题。
有人可以帮帮我吗!
这是我的代码:
library(shiny)
library(leaflet)
library(geojsonio)
url <- "pathTogeojson"
geojson <- geojsonio::geojson_read(url, what = "sp")
shinyApp(
ui <- fluidRow(
leafletOutput("map")),
server <- function(input, output, session) {
click_list <- reactiveValues(ids = vector())
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng=16.357795000076294, lat=48.194883921677935, zoom = 15) %>%
addPolylines(data=geojson, layerId = geojson@data$name_1, group = "selected", color="red", weight=3,opacity=1)
})
observeEvent(input$map_shape_click, {
click <- input$map_shape_click
proxy <- leafletProxy("map")
click_list$ids <- c(click_list$ids, click$id)
sel_lines <- geojson[geojson@data$name_1 %in% click_list$ids, ]
if(click$id %in% sel_lines@data$id)
{
nameMatch <- sel_lines@data$name_1[sel_lines@data$id == click$id]
click_list$ids <- click_list$ids[!click_list$ids %in% click$id]
click_list$ids <- click_list$ids[!click_list$ids %in% nameMatch]
proxy %>% removeShape(layerId = click$id)
}
else
{
proxy %>% addPolylines(data = sel_lines, layerId = sel_lines@data$id, color="#6cb5bc", weight=5,opacity=1)
}
})
})
我自己找到了解决方案..我的数据和我的不理解是问题所在。它仅在所有使用的列都是类型 character
时才有效...所以我必须使用 as.character()