Shiny Leaflet - 突出显示多边形

时间:2017-02-15 09:25:11

标签: r shiny leaflet

我有一个简单的闪亮应用程序,只有一个下拉列表列出阿富汗地区和相同的传单地图。 enter image description here

可以使用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帖子,但对它没有多大意义。

1 个答案:

答案 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")
    }
  })
}