用markercluster聚类多个层



我目前正在使用传单库进行地图可视化。我也使用markercluster插件来聚类我的点。

所以我现在的问题是:

我在3个不同的图层中有3个不同类别的标记。例如,餐厅,咖啡馆和酒吧层。我想把所有活动的图层组合到一个特定的集群中。

目前条目是分开聚类的,但我想把它们聚在一起。

下一步是根据childMarkers为集群上色。例如,集群包括餐馆和酒吧标记=>一半红/一半绿,只有餐馆=>只有红色等。

我希望有人能帮我找到一个解决办法。谢谢你!

你在问题中提到了两个不同的请求:

  1. 有3种不同类型的标记,但都应该聚集在一起。棘手的部分是,如果你想隐藏/显示特定类型(可能通过图层控制)。
  2. 根据每种类型中包含的标记的数量自定义集群外观。

对于点1,您可以明显地将所有3种类型的标记添加到同一个MarkerClusterGroup中,以便它们可以聚类在一起。如果您已经在不同的LayerGroups中拥有它们,您可以简单地执行myMCG.addLayers([layerGroup1, layerGroup2, layerGroup3]);和MCG将添加所有单独的标记。但是以后不要在地图上添加/删除那些LayerGroups !

困难的部分是当您希望能够动态地从地图中添加/删除特定类型的标记时。而不是只做map.removeLayer(layerGroupX);,您需要循环遍历所有单个标记并从MCG中删除它们,例如:

layerGroupX.eachLayer(function (marker) {
    myMCG.removeLayer(marker);
});

参见这个问题在MarkerClusterGroup插件网站的原因和一些额外的例子。按相反的方法将标记添加回MCG。

编辑:从那时起,我已经发布了一个leaf . featuregroup . subgroup插件,它解决了这个确切的用例。另请参见使用多个标记群集组显示重叠的群集

关于第2点,请参考插件文档中的自定义集群标记部分。基本上,在初始化MCG时使用iconCreateFunction选项。你传入一个函数,它接受一个参数(例如cluster),你可以使用cluster.getAllChildMarkers();来获得被样式化的集群中包含的标记数组。然后简单地遍历该数组以计算每种类型标记的数量,并相应地创建一个图标。

你也可以试试这个插件:q-cluster。但是它没有动画,所以远不如MCG好看。

最新更新