在RMarkdown的不同选项卡上使用“闪亮”同步两个leaftlet贴图

在RMarkdown的不同选项卡上使用“闪亮”同步两个leaftlet贴图,r,shiny,leaflet,r-markdown,flexdashboard,R,Shiny,Leaflet,R Markdown,Flexdashboard,在不同选项卡上同步两张传单地图时遇到问题 在查看前面的条目()之后,@TimSalabim提供的解决方案不起作用,因为地图位于不同的选项卡上 以下是一个MWE RMarkdown示例: --- title: "QuestionforStackOverflow" output: flexdashboard::flex_dashboard: runtime: shiny --- ```{r setup, include=FALSE} library(flexdashboard) library(

在不同选项卡上同步两张传单地图时遇到问题

在查看前面的条目()之后,@TimSalabim提供的解决方案不起作用,因为地图位于不同的选项卡上

以下是一个MWE RMarkdown示例:

---
title: "QuestionforStackOverflow"
output: 
flexdashboard::flex_dashboard:
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(leaflet)
```

Tab One
======================================================================
```{r tab1}
output$map1 <-
   renderLeaflet(
    leaflet() %>%
      addProviderTiles("CartoDB.Positron") %>%
      setView(-93.65, 42.0285, zoom = 4)
  )

leafletOutput("map1")

```
Tab Two
======================================================================
```{r tab2}

output$map2 <-
  renderLeaflet(
    leaflet() %>%
      addProviderTiles("CartoDB.Positron") %>%
      setView(-93.65, 42.0285, zoom = 4)
  )

leafletOutput("map2")
```
---
标题:“问题:溢出”
输出:
flexdashboard::flex_仪表板:
运行时间:闪亮
---
```{r设置,include=FALSE}
库(flexdashboard)
图书馆(闪亮)
图书馆(单张)
```
表一
======================================================================
```{r tab1}
输出$map1%
addProviderTiles(“CartoDB.Positron”)%%>%
setView(-93.65,42.0285,缩放=4)
)
单张输出(“map1”)
```
表二
======================================================================
```{r tab2}
输出$map2%
addProviderTiles(“CartoDB.Positron”)%%>%
setView(-93.65,42.0285,缩放=4)
)
单张输出(“map2”)
```
我想要一个双向的改变。对map1的任何视图更改—更改map2或对map2的任何更改都将更改map1

理想情况下:如果您在地图1上滚动到圣路易斯,那么地图2在圣路易斯上的缩放级别将相同


目前,这两张地图之间没有交互作用。有没有办法让它们同步

不知道这在R中是如何工作的,但在普通JavaScript中,您可以使用它来同步两个映射


如果您有两个选项卡,其中只有一个在同一时间可见,您也可以只在tab开关上同步,这更容易实现。

您可以使用
proxy()
来实现: 请参见此处的帮助:

对于您的特殊问题,这里有一个想法:

---
  title: "QuestionforStackOverflow"
  output: 
    flexdashboard::flex_dashboard:
  runtime: shiny
---

```{r setup, include=FALSE}
  library(flexdashboard)
  library(shiny)
  library(leaflet)
```

Tab One
======================================================================

```{r tab1}
output$map1 <-
  renderLeaflet(
    leaflet() %>%
      addProviderTiles("CartoDB.Positron") %>%
      setView(-93.65, 42.0285, zoom = 4)
  )

actionButton("syncMap1", "Fit to map2 bounds")
leafletOutput("map1")

observeEvent(input$syncMap1,{
  map2coords <- input$map2_bounds
  map1Proxy <- leafletProxy("map1")
  map1Proxy %>% fitBounds(lng1 = map2coords$east,
                          lat1 = map2coords$north,
                          lng2 = map2coords$west,
                          lat2 = map2coords$south)
})
```

Tab Two
======================================================================

```{r tab2}

output$map2 <-
  renderLeaflet(
    leaflet() %>%
      addProviderTiles("CartoDB.Positron") %>%
      setView(-93.65, 42.0285, zoom = 4)
  )
actionButton("syncMap2", "Fit to map1 bounds")
leafletOutput("map2")

observeEvent(input$syncMap2,{
  map1coords <- input$map1_bounds
  map2Proxy <- leafletProxy("map2")
  map2Proxy %>% fitBounds(lng1 = map1coords$east,
                          lat1 = map1coords$north,
                          lng2 = map1coords$west,
                          lat2 = map1coords$south)
})
```
---
标题:“问题:溢出”
输出:
flexdashboard::flex_仪表板:
运行时间:闪亮
---
```{r设置,include=FALSE}
库(flexdashboard)
图书馆(闪亮)
图书馆(单张)
```
表一
======================================================================
```{r tab1}
输出$map1%
addProviderTiles(“CartoDB.Positron”)%%>%
setView(-93.65,42.0285,缩放=4)
)
actionButton(“同步映射1”、“适合映射2边界”)
单张输出(“map1”)
observeEvent(输入$syncMap1{
map2coords%
setView(-93.65,42.0285,缩放=4)
)
actionButton(“同步映射2”,“适合映射1边界”)
单张输出(“map2”)
observeEvent(输入$syncMap2{

map1coords()我将尝试并遵循此文档。添加JS代码…*至于JS代码,不确定在哪里编辑RMarkdown。对于自动同步,您可以使用@Jieter选项卡更改检测的想法。但就我所尝试的而言,flexdashboard是不可能的:您不能为选项卡容器提供id,因此,您不能每次都进行输入更改选择另一个选项卡的时间。使用shiny,这将更容易。灵活处理。是否可以为用户切换选项卡时创建事件?这可能会解决无限循环问题。快速查看后,在js中似乎可以,但在R中可能不会。