我有一个简单的闪亮应用程序,只有一个下拉列表列出阿富汗地区和相同的传单地图。
可以使用link
中的AFG_adm2.shp在此http://www.gadm.org/download访问形状文件此处为应用代码:
library(shiny)
library(leaflet)
library(rgdal)
library(sp)
afg <- readOGR(dsn = "data", layer ="AFG_adm2", verbose = FALSE, stringsAsFactors = FALSE)
ui <- fluidPage(
titlePanel("Test App"),
selectInput("yours", choices = c("",afg$NAME_2), label = "Select Country:"),
leafletOutput("mymap")
)
server <- function(input, output){
output$mymap <- renderLeaflet({
leaflet(afg) %>% #addTiles() %>%
addPolylines(stroke=TRUE, color = "#00000", weight = 1)
})
}
# Run the application
shinyApp(ui = ui, server = server)
我想要的功能是,当我从下拉列表中选择一个区域时,该区域的边框填充会发生变化,而setView功能会使该区域成为焦点。有人可以帮我解决问题吗?我查看了this帖子,但对它没有多大意义。
答案 0 :(得分:5)
当用户选择区时,您可以使用leafletProxy
更改地图。您可以在之前绘制的红色多边形顶部添加稍厚的红色多边形以突出显示它,然后使用setView
移动视图。
这是我要添加的内容:
proxy <- leafletProxy("mymap")
observe({
if(input$yours!=""){
#get the selected polygon and extract the label point
selected_polygon <- subset(afg,afg$NAME_2==input$yours)
polygon_labelPt <- selected_polygon@polygons[[1]]@labpt
#remove any previously highlighted polygon
proxy %>% removeShape("highlighted_polygon")
#center the view on the polygon
proxy %>% setView(lng=polygon_labelPt[1],lat=polygon_labelPt[2],zoom=7)
#add a slightly thicker red polygon on top of the selected one
proxy %>% addPolylines(stroke=TRUE, weight = 2,color="red",data=selected_polygon,group="highlighted_polygon")
}
})
}