【发布时间】:2017-04-27 12:55:45
【问题描述】:
在我正在开发的 Leaflet Shiny 应用程序中选择和取消选择多边形时,我在更改多边形样式时遇到了一些问题。在我当前的应用程序中,当您单击一个多边形时,该多边形会以不同的颜色突出显示。理想情况下,我希望用户能够选择并突出显示多个多边形。我还希望用户能够重新单击单个突出显示的多边形以取消选择它。
我能够管理的最好方法是选择多个多边形,为它们提供“已选择”的相同组 ID,然后在重新单击多边形时取消选择整个组。这是一些示例/可重现的代码:
library(raster)
library(shiny)
library(leaflet)
#load shapefile
rwa <- getData("GADM", country = "RWA", level = 1)
shinyApp(
ui = fluidPage(
leafletOutput("map")
),
server <- function(input, output, session){
#initial map output
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addPolygons(data = rwa,
fillColor = "white",
fillOpacity = 1,
color = "black",
stroke = T,
weight = 1,
layerId = rwa@data$OBJECTID,
group = "regions")
}) #END RENDER LEAFLET
observeEvent(input$map_shape_click, {
#create object for clicked polygon
click <- input$map_shape_click
#define leaflet proxy for second regional level map
proxy <- leafletProxy("map")
#subset regions shapefile by the clicked on polygons
selectedReg <-rwa[rwa@data$OBJECTID == click$id,]
#map clicked on polygons
proxy %>% addPolygons(data = selectedReg,
fillColor = "red",
fillOpacity = 1,
weight = 1,
color = "black",
stroke = T,
group = "selected",
# layerId = "selected")
layerId = selectedReg@data$OBJECTID)
#remove polygon group that are clicked twice
if(click$group == "selected"){
proxy %>%
clearGroup(group = "selected")
} #END CONDITIONAL
}) #END OBSERVE EVENT
}) #END SHINYAPP
在上面的例子中,每个被点击的多边形都会变成红色。如果再次单击先前选择的红色多边形,则会从地图中清除每个红色多边形,留下初始的白色多边形渲染。
当我一次只处理一个多边形时,我可以通过使用字符串 layerId “selected”(在上面的代码中注释掉)来实现所需的选择/取消选择效果,但是这样做会消除我选择和取消选择的能力同时突出显示多个多边形。
我愿意接受任何和所有建议!
【问题讨论】: