addEventListener to google maps in shiny to autoclose infowindows

addEventListener to google maps in shiny to autoclose infowindows

相关话题

Closing info windows in google maps by clicking the map?

Google Maps: Auto close open InfoWindows?

问题

我能够使用 close 方法定位所有标记并使用 for 循环迭代它们以使用以下方法手动关闭它们各自的信息窗口:

for (var i = 0; i < mapgoogleMarkersdefaultLayerId.length; i++) {
        mapgoogleMarkersdefaultLayerId[i].infowindow.close();
      }

但是,我计划在用户单击地图上的其他任何位置后关闭所有信息窗口。我试图通过以下方式在地图对象上使用 addEventListener:

map.addEventListener("click", function(event) {
      for (var i = 0; i < mapgoogleMarkersdefaultLayerId.length; i++) {
        mapgoogleMarkersdefaultLayerId[i].infowindow.close();
      }
});

但是,在地图对象上使用侦听器也会捕获标记,因此一旦用户单击标记就会立即关闭信息窗口,导致没有任何反应。我尝试使用诸如引用 mapmap.__gm.panes.mapPane 之类的东西来定位 google 地图的各种 "base layers" 以定位标记下方的地图窗格,但没有结果。

更多信息

我将此脚本作为另一个文件包含在我闪亮的应用程序文件夹中,并通过 ui.

中的 includeScript("closeInfoWindows.js") 将其链接到我的应用程序

MCVE

library(shiny)
library(googleway)

ui <- fluidPage(
  google_mapOutput(outputId = "map", height = "800px")
)

server <- function(input, output) {

  tram_stops$info <- "Make me dissappear!"
  set_key(api_key)

  output$map <- renderGoogle_map({
    google_map(data = tram_stops) %>%
      add_markers(lat = "stop_lat", lon = "stop_lon", info_window = "info")
  })
}

shinyApp(ui, server)

我已经更新了 googleway 的开发版本,因此您可以指定 close_info_window。如果设置为 TRUE,当您点击地图时,标记上任何打开的信息 windows 都将关闭。

## install the development version:
devtools::install_github("SymbolixAU/googleway")

library(googleway)  ## min version: 2.6.1002

tram_stops$info <- "Make me dissappear!"
set_key(apiKey)

google_map(data = tram_stops) %>%
  add_markers(
    info_window = "info", 
    close_info_window = T
    )

备注

这是包的开发分支,所以我可能会在没有警告的情况下进行更改(例如,更改参数名称)。任何更改都将记录在 github page relating to this feature