对于我目前正在处理的项目,我尝试将多个标记图层添加到Leaflet地图中,以便最终用户可以选择他或她想要查看的标记。由于总共有很多标记,我还想将这些标记聚集到一定的缩放级别。但问题是,当我将标记分成几个图层组时,它们都是单独聚集的。
具体来说,当我将标记绘制为一个图层组时,在调用addMarkers时使用clusterOptions,集群按我的意愿工作。当我为我的制造商使用多个图层组以便为最终用户提供选择他/她想要看到的标记的选项时,在每个图层组内制作聚类,而我希望它们全部聚集在一起。
为了使这更加切实,我提出了以下可重现的例子:
# Library
library(leaflet)
library(dplyr)
# Data
df <- quakes
# Plot
leaflet(df) %>%
setView(lng=181.462, lat=-23.64275, zoom=4) %>%
addProviderTiles("Stamen.Terrain") %>%
addCircleMarkers(~long, ~lat, weight=2, color="Red", radius=2,
data=filter(df, mag>=4 & mag<5),
clusterOptions=markerClusterOptions(disableClusteringAtZoom=6),
group="Magnitude between 4 and 5") %>%
addCircleMarkers(~long, ~lat, weight=2, color="Blue", radius=2,
data=filter(df, mag>=5 & mag<6),
clusterOptions=markerClusterOptions(disableClusteringAtZoom=6),
group="Magnitude between 5 and 6")%>%
addLayersControl(
overlayGroups=c("Magnitude between 4 and 5", "Magnitude between 5 and 6"),
options=layersControlOptions(collapsed=FALSE)
)
如果您在R中运行此代码,您将获得一张显示斐济附近地震的地图。我添加了两个图层组来显示不同大小的地震:一组幅度在4到5之间,一组幅度在5到6之间。我还添加了星团,因此地图上没有标记,但与我的相似在工作项目中,为每个单独的图层组创建集群。这导致了单独的聚类,它们可以紧挨着彼此,而我希望将它们放在一个聚类中。
所以归结为我希望所有标记(来自多个图层组)都放在同一个集群中,因此它们都聚集在一起,而不是为每个图层组分别聚集。换句话说,我想为最终用户选项保留多个标记组,但我希望所有这些标记组都在同一个群集组中,因此在选择时它们会聚集在一起。
非常感谢任何帮助!
答案 0 :(得分:0)
您可以执行已做的事情,然后在叠加部分中创建伪图层并从中删除主图层组。在群集中添加主图层组。然后,您可以简单地检测到地图的layer events被删除或添加的图层,如下所示。因此,所有标记都在一个群集中,您可以删除或添加图层。
请注意,这是Java代码,请将其转换为您自己的代码。
map.on("overlayadd", (e) =>{
if (e.layer === fake_layer_4_5) markersCluster.addLayer(main_layer_4_5);
if (e.layer === fake_layer_5_6) markersCluster.addLayer(main_layer_5_6);
});
map.on("overlayremove", (e) =>{
if (e.layer === fake_layer_4_5) markersCluster.removeLayer(main_layer_4_5);
if (e.layer === fake_layer_5_6) markersCluster.removeLayer(main_layer_5_6);
});