отображение 'синхронизации' (просмотр карты) в блестящем

Я пытаюсь иметь два пространственных графика бок о бок в блестящем, и мне предложили мощную функцию sync of mapview. Поняв, как отобразить объект mapview в shiny, Я попытался интегрировать sync в 'shiny', но получил следующую ошибку: Ошибка в слоте (x, "map"): нет слота с именем "map" для этого объекта класса "shiny.tag.list" < / я>. Означает ли это, что sync не имеет объекта карты, следовательно, невозможно интегрировать sync или latticeView с shiny? Если это так, я думаю, что должны быть обходные решения, и я все слышу. Это хорошая возможность иметь доступ из Shiny и позволяет делать некоторые интересные вещи. Очень признателен за любые предложения. Вот пример воспроизводимого кода:

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)

person SatishR    schedule 26.10.2016    source источник


Ответы (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
    })
  }
)
person timelyportfolio    schedule 28.10.2016
comment
Приносит извинения за отсутствие обсуждения в отношении sync возвращенных объектов. ‹Br› Это полезно, однако карта отображалась только тогда, когда sync объект вставлялся как ui. Я не могу добавлять карты динамически, т.е. код с renderUI и uiOutput открыл окно, но без карты. Не уверен, почему? Кроме того, я хотел бы знать, могу ли я создать объект sync в реактивном выражении с использованием объектов renderLeaflet, а затем использовать его в renderUI и 'uiOutput? Очень признателен за ваши предложения. - person SatishR; 28.10.2016
comment
какие версии shiny, htmltools и htmlwidgets у вас есть? - person timelyportfolio; 28.10.2016
comment
Вот он: shiny 0,14,1 htmltools 0,3,5 htmlwidgets 0,7 - person SatishR; 28.10.2016
comment
Можете ли вы открыть в браузере и использовать F12 или CTRL + Shift + I или щелкнуть левой кнопкой мыши / проверить, нет ли ошибок? - person timelyportfolio; 28.10.2016
comment
Я просто хочу упомянуть, что это Mac, а на Chrome здесь это скриншот Я вижу по крайней мере одну ошибку, но не понимаю, что это значит. - person SatishR; 28.10.2016
comment
не уверен, но можете ли вы без особых хлопот попробовать сделать install.packages(leaflet) и install.packages(mapview), чтобы получить версии CRAN. - person timelyportfolio; 28.10.2016
comment
Я сделаю это, вы можете подтвердить, что с вашей стороны все работает нормально? Спасибо - person SatishR; 28.10.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person SatishR; 29.10.2016