2015-10-15 33 views
2

我目前正在使用Leaflet插件处理地图可视化。我还使用了markercluster插件来聚集我的观点。所以我现在的问题如下: 我在3个不同的层中有3种不同的标记类别。例如餐厅/咖啡厅和酒吧层。我想将所有活动层合并到特定的群集。目前这些条目是分开聚类的,但我想将它们聚集在一起。下一步将根据childMarkers为集群着色。例如。集群包括餐厅和酒吧标记=>半红/半绿,只有餐厅=>只有红色等使用markercluster聚簇多个图层

我希望有人可以帮助我找到解决方案。 谢谢!

回答

0

你提到你的问题2个不同的请求:

  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); 
}); 

this issue参见MarkerClusterGroup插件网站的原因和一些额外的例子。做相反的事情,将标记添加回MCG。

至于第2点,请参阅插件文档的Customising the Clustered Markers部分。基本上,初始化MCG时使用选项iconCreateFunction。您传递一个函数,该函数只接受一个参数(例如cluster),您可以使用cluster.getAllChildMarkers();获取正在样式化的群集中包含的标记数组。然后只需遍历该数组来计算每种标记的数量,并相应地创建一个图标。

你也可以试试这个插件:q-cluster。但它没有动画效果,所以它比MCG的眼睛糖果要少得多......