2016-04-22 72 views
1

我在地圖上有一些點與一些關聯的數據。過濾和選擇R閃亮和傳單中的點

首先,我想根據它們的屬性過濾這些點。這工作正常,但最近當我運行應用程序和小提琴的過濾器,最終它會停止刪除以前過濾的點,並剛剛加載新過濾點頂部。經過大約10次濾波器調整後,這種情況已經發生。這就好像clearMarkers()函數停止工作。過濾的數據也將顯示在一個被動的data.table(該部分工作正常,沒有包括在這個例子中)。

其次,我想單擊點來選擇它們。選定點的數據將在稍後顯示。我絕對可以選擇一個點,但我無法保持所有點擊點的反應變量。另外,如果再次點擊,選定的點應該被取消選中。選定的點將在地圖上突出顯示(通過在地圖上添加更亮的標記)以及反應的data.table中,選擇應更新地圖中的點擊次數並在表格中單擊。但是這只是一小步。

下面是一些示例代碼,它不起作用。

library(sp) 
library(leaflet) 
library(shiny) 

data <- data.frame(x = c(10,20,30,10,40), y = c(20,20,10,30,30), z = c(1,2,3,4,5)) 
points <- SpatialPointsDataFrame(data[,1:2],data[3]) 

server <- function(input, output, session) { 
    filtered <- reactive({ 
    z.in <- input$z 
    points[[email protected]$z > z.in,] 
    }) 
    selected <- reactiveValues() 
    output$map <- renderLeaflet({leaflet()}) 
    observe({ # This observer works, but it seems to stop working about about 10 tries 
    leafletProxy("map") %>% 
     clearMarkers() %>% 
     addCircleMarkers(data = filtered()) 
    }) 
    observe({ # This observer does not work, and the app won't run unless you comment it out 
    clicked <- unlist(input$map_marker_click[3:4]) 
    if (is.na(clicked)) {selected <- clicked} 
    else if (clicked %in% selected) {selected <- selected[-clicked]} 
    else {selected <- append(selected, clicked)} 
    }) 
} 

ui <- bootstrapPage(
    tags$style(type = "text/css", "html, body {width:100%;height:100%}"), 
    leafletOutput("map", width = "100%", height = "100%"), 
    absolutePanel(top = 10,left = 10, 
       sliderInput("z", "z",0,6,0) 
)) 

shinyApp(ui = ui, server = server) 

回答