2017-02-15 2 views
2

Ich habe eine einfache shiny-App mit nur einem Dropdown-Liste Bezirke von Afghanistan und eine Broschüre Karte der gleichen. enter image description hereShiny Leaflet - Highlight Polygon

kann die Form-Datei an diesem link zugegriffen werden - mit AFG_adm2.shp von http://www.gadm.org/download

hier ist der Code App:

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) 

ich die Funktionalität wollen, dass, wenn ich wählen Sie einen Kreis aus der Dropdown Liste, die Grenze Füllung dieses Bezirks ändert sich, und die SetView-Funktion bringt diesen Bezirk in den Fokus. Kann mir jemand mit dem Code helfen? Ich habe mir this Post angesehen, kann aber nicht viel Sinn daraus machen.

Antwort

2

Sie können leafletProxy verwenden, um die Karte zu ändern, wenn der Benutzer einen Bezirk auswählt. Sie können ein etwas dickeres rotes Polygon oberhalb des zuvor gezeichneten hinzufügen, um es hervorzuheben und setView verwenden, um die Ansicht zu verschieben. Diese

ist, was ich möchte hinzufügen:

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

, die gearbeitet, aber nur für die reproduzierbare Beispiel ... Es ist ein Fehler, wenn Sie „polygon_labelPt“ erklären. Kannst du mir das erklären, damit ich es modifizieren kann? Ich verstehe diese Codezeile nicht: 'polygon_labelPt <- selected_polygon @ Polygone [[1]] @ labpt' – ProgSnob

+0

Okay, beim Debuggen gibt selected_polygon @ polygons eine leere Liste zurück. Wenn Sie also 'selected_polygon @ polygons [[1]]' aufrufen, wird ein Fehler mit einem Index außerhalb des Bereichs zurückgegeben. selected_polygon @ bbox scheint 2 Sätze Lat zu haben, aber lang. Können wir sie benutzen? – ProgSnob

+0

Die erste 'selected_polygon'-Zeile untergliedert die'Afg'-Daten, um das Polygon zu extrahieren, dessen Name dem entspricht, was der Benutzer ausgewählt hat. Dann extrahiert das 'polygon_labelPt' das erste Polygon des Datenrahmens (' selected_polygon @ polygons [[1]] ') und extrahiert dann das labpt (' @ labpt'). Das labpt ist, wo das Polygon beschriftet werden soll. – NicE

Verwandte Themen