2016-04-22 68 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) 

回答