R Leaflet 中的嵌套标记

Nested Markers in R Leaflet

我有一个 dataframe 包含嵌套生态调查数据。数据的概念描述 - 在 'top' 级别是一个调查站点;站点内有 n 个陷阱;在陷阱中可以捕获 n 只动物。

我想显示一张 Leaflet 地图,显示对应于数据顶级(即调查站点)的标记。当您单击调查站点时,它应该呈扇形展开并显示调查站点内 每个陷阱的标记。单击陷阱时,它应该会显示陷阱中捕获的动物列表(此时常规 Leaflet 弹出窗口就可以了)。

我不知道这在 R Leaflet 中是否可行,尽管对 Google and/or SO 进行了多次搜索。我确实找到了 one potential Javascript solution,但我不知道它是否会准确地转换为解决我面临的问题。然而,至少,将鼠标悬停在标记上并显示嵌套标记的行为是我在 sites[=35] 中查看 traps 时所追求的功能=].

我在下面包含了一些虚拟数据的示例嵌套数据框,以及准系统 Leaflet reprex。在虚拟数据中,为简单起见,我为每个 site 分配了相同的 lat/lon。单击任何 site(001、002、003)时,陷阱将从该站点散开。在 Site 001 只有 1 个独特的陷阱(ID = 001-001),但 Site 2 有两个独特的陷阱(002-001 和 002-002)。 Site 003 只有一个陷阱。

library(leaflet)
library(tidyverse)

x<-as_tibble(data.frame(site = c("001", "001", "001", "002", "002", "002", "003"), 
              trap = c("001-001", "001-001", "001-001", "002-001", "002-001", "002-002", "003-001"),
              animal = c("001-001-001", "001-001-002", "001-001-003", "002-001-001", "002-001-002", "002-002-003", "003-001-001"),
              lat = c(51.1, 51.1, 51.1, 52.4, 52.4, 52.4, 51.5),
              lon = c(-1.1, -1.1, -1.1, -1.7, -1.7, -1.7, -1.2)))


leaflet() %>%
  addProviderTiles(providers$OpenStreetMap, options = providerTileOptions(noWrap = TRUE), group = "Open Street Map") %>%
  setView(lng = -1.900796, lat = 52.479380, zoom = 7) %>% 
  addLayersControl(baseGroups = c("Open Street Map")))

希望有可能的解决方案 - 非常感谢任何帮助。

addCircleMarkers 函数中有一个创建集群 (clusterOptions = TRUE) 的选项。

我不确定下面的代码是否生成了您想要的结果,但它可能会帮助您进行下一步。

leaflet() %>%
  addProviderTiles(providers$OpenStreetMap, options = providerTileOptions(noWrap = TRUE), group = "Open Street Map") %>%
  setView(lng = -1.900796, lat = 52.479380, zoom = 7) %>% 
  addLayersControl(baseGroups = c("Open Street Map")) %>% 
  addCircleMarkers(data = x, lng = ~lon, lat = ~lat, clusterOptions = TRUE, 
                   popup = paste("<b>Site:</b>", x$site, "<br>",
                                 "<b>lon:</b>", x$lon, "<br>",
                                 "<b>lat:</b>", x$lat, "<br>",
                                 "<b>trap:</b>", x$trap, "<br>",
                                 "<b>animal:</b>", x$animal))

我添加了弹出窗口来跟踪哪个标记是哪个,但是如果视觉上更具吸引力,您可以使用颜色或形状做一些事情。

附加说明:如您所见,我已经使用一些 html 脚本创建了弹出窗口,用于格式化 (<b></b>) 和换行符 ( <br>)。如果需要,您可以在这些弹出窗口中使用其他 html 技巧,它通常有效并且高度可定制。 但是,leafpop 包可能是在弹出窗口中添加表格、图像和图形的更快方法。