我有一个dataframe
,其中包含嵌套的生态调查数据。数据的概念性描述-在“最高”级别是一个调查站点;网站内有 n 个陷阱;在陷阱中可以抓到 n 个动物。
我想显示一个Leaflet
地图,其中显示了与数据顶层(即调查地点)相对应的标记。当您单击调查站点时,它应呈扇形展开并显示调查站点内 中每个陷阱的标记。单击陷阱时,它应显示陷阱中捕获的动物的列表(此时可以正常弹出Leaflet
。
尽管Google和/或SO进行了很多搜索,但我不知道在R
Leaflet
内是否还可以实现。我确实找到了one potential Javascript solution,但我不知道它是否可以完全解决我所面临的问题。但是,至少,将鼠标悬停在标记上并显示嵌套标记的行为是我在站点内查看陷阱时需要的功能。
我在下面提供了一些虚拟数据的嵌套数据框示例,以及准系统Leaflet
reprex。为了简单起见,在虚拟数据中,我为每个site
分配了相同的经度/纬度。单击任何site
(001、002、003)时,陷阱将从该站点散开。在站点001中,只有1个唯一陷阱(ID = 001-001),但是站点2有两个唯一陷阱(002-001和002-002)。站点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")))
希望有一个解决方案-我们将不胜感激。
答案 0 :(得分:3)
可以在clusterOptions = TRUE
函数中创建群集(addCircleMarkers
)。
我不确定下面的代码是否可以生成您想要的代码,但是它可以帮助您进行下一步。
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
软件包可能是在弹出窗口中添加表,图像和图形的更快方法。