单击栏时更新R闪亮中的Deckgl贴图单击、贴图、Deckgl

2023-09-03 14:06:36 作者:二逼青年欢乐多

正在尝试使用这些属性创建闪亮的应用程序。

默认视图为聚合层。将有列数/条数。单击列时,该视图将更新以显示数据的非聚合版本。

这就像知道正在点击哪个栏并筛选与其相关的数据。

为什么LOL只能通过tgp启动,不能通过界面启动

我已经编写了下面的代码,它执行聚合层。但是,不确定如何获取";CLICKED_ON_This_BAR&Quot;详细信息。在这里,如果我们得到,用户点击了";区域A";的栏,那么我们就可以使用区域A过滤orig_df并更新视图。如何进行这项工作?

rm( list = ls() )

library( shiny ) ; library( shinydashboard ) ; library( dplyr ) ; library( deckgl )

ui <- basicPage( deckglOutput( 'map', height = '800px' ) )

server <- function(input, output) {

aggregate_df = data.frame( 'area' = LETTERS[1:2], 'count' = 110:111, median_lon = c( 3.39, 3.41 ),
                         
                         median_lat = c( 49.7, 49.4 ), color = c("#0080FF", "#FF0080") )

orig_df = data.frame( 'area' = rep( c( 'A', 'B' ), c( 3, 2 ) ), count = 10:14, lon = c( 3.45, 3.39, 3.19, 3.41, 3.92 ),
                    
                    lat = c( 48, 49.7, 52, 49.4, 51.5 ), color = c("#0080FF", "#FF0080", "#FF3030", "#00EE00", '#FF7F24') )                    


output$map = renderDeckgl({

deckgl( zoom = 7, pitch = 35, latitude = 48.29507, longitude = 4.0731520 ) %>%
  
  add_column_layer(
    data = aggregate_df,
    getPosition = ~median_lon + median_lat,
    getElevation = ~count,
    getFillColor = ~color,
    getTooltip = "Area: {{area}}, Count: {{count}}",
    elevationScale = 100
  ) %>% add_basemap()

})


# observeEvent({
#   
#   deckgl_proxy( 'map' ) %>%
#     
#     add_column_layer(
#       data = orig_df %>% filter( area == click[['A']] ),
#       getPosition = ~lon + lat,
#       getElevation = ~count,
#       getFillColor = ~color,
#       getTooltip = "Area: {{area}}, Count: {{count}}",
#       elevationScale = 50
#     ) %>% update_deckgl(it = "works")
#   
# })

}

shinyApp(ui, server)

推荐答案

您就快成功了。您要做的是监听input$map_onclick反应,它除了返回其他信息外,还返回一个包含相关信息的对象槽。只要您单击任何栏,就会生成此对象,下面是反应的结构:

List of 1
 $ map_onclick:List of 3
  ..$ lng   : num 3.4
  ..$ lat   : num 49.4
  ..$ object:List of 5
  .. ..$ area      : chr "B"
  .. ..$ count     : int 111
  .. ..$ median_lon: num 3.41
  .. ..$ median_lat: num 49.4
  .. ..$ color     : chr "#FF0080"

有了这段信息,就可以非常直接地调整您的代码(虽然我从未使用过deckgl,所以我只是使用了您的注释代码--根据需要进行调整)

observeEvent(input$map_onclick, {
        deckgl_proxy( 'map' ) %>%

          add_column_layer(
            data = orig_df %>% filter( area == input$map_onclick$object[["area"]] ),
            getPosition = ~lon + lat,
            getElevation = ~count,
            getFillColor = ~color,
            getTooltip = "Area: {{area}}, Count: {{count}}",
            elevationScale = 50
          ) %>% update_deckgl(it = "works")
   })

我想剩下要做的是添加一些从详细地图中获取的逻辑,但您可以很容易地向数据添加一个标志,从中可以得出您所在的层(聚合或原始),并在此基础上运行不同的逻辑。

 
精彩推荐
图片推荐