2016-10-26 226 views
0

我想要two spatial plots side-by-side in shiny,並且我被建議爲一個強大的功能,syncmapview。在確定如何display mapview object in shiny後,我嘗試將'sync'整合到'shiny'中,但出現以下錯誤:插槽(x,「map」)中的錯誤:對於此類「shiny.tag」的名稱「map」沒有插槽.list「。這是否意味着sync沒有地圖對象,因此,不可能將synclatticeViewshiny?如果是這樣,我想應該有解決方案,我的耳朵都是開放的。這是一個很好的功能,可以從Shiny訪問,並允許做一些有趣的事情。非常感謝任何建議。下面是示例代碼重複性:顯示的'同步'(mapview)閃亮

library(shiny) 
library(mapview) 
ui <- fluidPage(
    mapviewOutput("samplemap"), 
    p() 
) 
server <- function(input, output, session) { 
    output$samplemap <- renderMapview({ 
     m1 <- mapview(gadmCHE,zcol="ID_1") 
     m2 <- mapview(gadmCHE,zcol="OBJECTID") 
     sync(m1,m2) 
     }) 
} 
shinyApp(ui, server) 

回答

1

我們已經討論了使從sync的htmlwidget返回值。目前,sync返回小冊子地圖的htmltools::tagList。將tags插入shiny將與插入mapview稍有不同。我會嘗試在下面的代碼中解釋。

library(mapview) 

m1 <- mapview(gadmCHE,zcol="ID_1") 
s1 <- sync(m1,m1) 


library(shiny) 

# if not dynamically adding maps 
# we can just insert as ui 

shinyApp(
    ui = s1, 
    server = function(input,output){} 
) 

# if there is a need to create the maps after UI 
# then we will need to handle differently 
# since sync gives us tags instead of an htmlwidget 
shinyApp(
    ui = uiOutput("syncmap"), 
    server = function(input,output){ 
    output$syncmap = renderUI({ 
     s1 
    }) 
    } 
) 
+0

因缺少關於同步返回對象的討論部分而道歉。
這很有用,但是,只有當'sync'對象插入爲'ui'時才顯示地圖。我無法動態添加地圖,即具有'renderUI'和'uiOutput'的代碼打開了一個窗口,但沒有地圖。不知道爲什麼?另外,我想知道我是否可以使用'renderLeaflet'對象在反應式表達式中創建'sync'對象,然後在'renderUI'和''uiOutput'中使用?非常感謝您的建議。 – SatishR

+0

你有什麼版本的'shiny','htmltools'和'htmlwidgets'? – timelyportfolio

+0

這裏是:'shiny' _0.14.1_'htmltools' _0.3.5_ 'htmlwidgets' _0.7_ – SatishR