2017-02-15 88 views
2

我有一個簡單的閃亮應用程序,只是一個下拉列表阿富汗地區和傳單地圖相同。 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的帖子,但沒有多大意義。

回答

2

當用戶選擇一個分區時,您可以使用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 <- [email protected][[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") 
    } 
    }) 
} 
+0

奏效,但只適用於重複的例子......還有,當你宣佈「polygon_labelPt」是一個錯誤。你能解釋一下嗎,我可以修改它嗎?我不明白這行代碼:'polygon_labelPt < - selected_polygon @ polygons [[1]] @ labpt' – ProgSnob

+0

好的,在調試時,selected_polygon @ polygons返回一個空列表。所以即使調用'selected_polygon @ polygons [[1]]'也會返回一個下標越界錯誤。 selected_polygon @ bbox似乎有2組經緯度,雖然長。我們可以使用它們嗎? – ProgSnob

+0

第一個'selected_polygon'行將子集'afg'數據提取出具有與用戶所選內容相對應的名稱的多邊形。然後'polygon_labelPt'提取數據幀的第一個多邊形('selected_polygon @ polygons [[1]]'),然後提取labpt('@ labpt')。 labpt是多邊形應該貼上標籤的地方。 – NicE