2017-06-02 4 views
0

Am Beispiel unten, ich versuche, einen Weg, um herauszufinden, Funktionalität meiner glänzende App, so dass die folgenden Werke hinzuzufügen:Klicken Sie auf Punkte in einer Broschüre Karte als Eingang für ein Grundstück in glänzenden

  1. Click auf einen Punkt auf der Karte
  2. das die Handlung nach Station Änderungen und
  3. Eingänge der entsprechenden Station in den „ein-Station klicken Sie auf“ Seitenleiste

Grundsätzlich würde Ich mag zu können, klicken Sie entweder auf die Karte für eine Station ODER geben Sie die Station manuell mit einer Tastatur ein.

Ist dies mit Beipackzettel möglich? Ich habe Hinweise auf die Verwendung von Plotly gesehen, die die ultimative Lösung sein könnte, aber ich würde gerne, wenn möglich, in einem kleinen Teil blättern, weil ich bereits eine Menge Arbeit mit Flugblatt getan habe. Dies ist ähnlich wie diese question obwohl es Arbeitsbeispiel hier:

library(shiny) 
library(leaflet) 
library(shinydashboard) 
library(ggplot2) 
library(dplyr) 

data("quakes") 
shinyApp(
    ui = dashboardPage(title = "Station Lookup", 
        dashboardHeader(title = "Test"), 
        dashboardSidebar(
         sidebarMenu(
         menuItem("Data Dashboard", tabName = "datavis", icon = icon("dashboard")), 
         menuItem("Select by station number", icon = icon("bar-chart-o"), 
            selectizeInput("stations", "Click on Station", choices = levels(factor(quakes$stations)), selected = 10, multiple = TRUE) 
         ) 
         ) 
        ), 
        dashboardBody(
         tabItems(
         tabItem(tabName = "datavis", 
           h4("Map and Plot"), 
           fluidRow(box(width= 4, leafletOutput("map")), 
              box(width = 8, plotOutput("plot"))) 
         ) 
         ) 
        ) 
), 

    server = function(input, output) { 

    ## Sub data  
    quakes_sub <- reactive({ 

     quakes[quakes$stations %in% input$stations,] 

    }) 

    output$plot <- renderPlot({ 

     ggplot(quakes_sub(), aes(x = depth, y = mag))+ 
     geom_point() 

    }) 


    output$map <- renderLeaflet({ 
     leaflet(quakes) %>% 
     addTiles() %>% 
     addCircleMarkers(lng = ~long, lat = ~lat, layerId = ~stations, color = "blue", radius = 3) %>% 
     addCircles(lng = ~long, lat = ~lat, weight = 1, 
        radius = 1, label = ~stations, 
        popup = ~paste(stations, "<br>", 
            depth, "<br>", 
            mag) 
     ) 

    }) 

    } 
) 

Antwort

2

Sie input$map_marker_click und updateSelectInput() verwenden können:

Edit: Zusätzliche Funktionalität, die Stationen aus selectInput() gelöscht werden, wie von OP in den Kommentaren vorgeschlagen.

(Vergessen Sie nicht, zu Ihrer Serverfunktion hinzuzufügen).

observeEvent(input$stations,{ 
    updateSelectInput(session, "stations", "Click on Station", 
        choices = levels(factor(quakes$stations)), 
        selected = c(input$stations)) 
}) 

observeEvent(input$map_marker_click, { 
    click <- input$map_marker_click 
    station <- quakes[which(quakes$lat == click$lat & quakes$long == click$lng), ]$stations 
    updateSelectInput(session, "stations", "Click on Station", 
        choices = levels(factor(quakes$stations)), 
        selected = c(input$stations, station)) 
}) 

Diese Funktionalität wird jedoch teilweise durch das Popup-Ereignis (?) Überschrieben. Wie ich sehe, gibt es einen inneren blauen Kreis (dunkler blau), der, wenn er angeklickt wird, das Popup erzeugt. Die input$map_marker_click funktioniert jedoch nur, wenn Sie auf den äußeren (hellblauen) Kreis klicken. Ich würde es als ein Fehler melden, ...

+0

Nur Problem mit diesem Ansatz ist, dass der letzte "Klick" in der Auswahl Eingang bleibt - wie Sie es löschen können. Es bleibt dort, bis eine neue "Station" angeklickt wird. In diesem Fall können Sie es manuell vom Feld "Klicken auf Station" zurücksetzen. Das Ändern von 'selected = c (Eingabe von $ stations, station)' zu 'selected = c (station)' behebt dieses Problem, obwohl ich mir absolut sicher bin, warum. – boshek

+0

Auch schlägst du vor, du wirst es melden und ich sollte ... so oder so glücklich. – boshek

+0

ah sah das Problem nicht, lass mich einen Blick darauf werfen. In Bezug auf die Berichterstattung, gehen Sie voran, da ich die Funktionalität im Moment nicht benötige und nicht auf die Updates warten würde, ... – BigDataScientist

Verwandte Themen