addEventListener to google maps in shiny to autoclose infowindows

时间:2018-05-08 15:57:41

标签: r google-maps shiny googleway

相关主题

Closing info windows in google maps by clicking the map?

Google maps api close infowindow when clicking somewhere else

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之类的东西来定位谷歌地图的各种“基础层”,以便在没有结果的情况下定位标记下面的标记。

更多信息

我将此脚本作为另一个文件包含在我的闪亮app文件夹中,并通过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)

1 个答案:

答案 0 :(得分:1)

我已更新googleway的开发版本,因此您可以指定close_info_window。如果设置为TRUE,则单击地图时,标记上的所有打开信息窗口都将关闭。

## 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
    )

enter image description here

注意

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