Вы упоминаете 2 различных запросов в вашем вопросе:
- Имея 3-х различных типов маркеров, но все должны группироваться вместе. Трудная часть - это если вы хотите скрыть/показать определенный тип (возможно, через Layers Control).
- Настройка внешнего вида кластеров на основе количества содержащихся в нем маркеров каждого типа.
Что касается пункта 1, вы можете, очевидно, добавить все 3 типа маркеров в одну и ту же группу MarkerClusterGroup, чтобы они могли группироваться вместе. Если у вас уже есть их в разных LayerGroups, вы можете просто сделать myMCG.addLayers([layerGroup1, layerGroup2, layerGroup3]);
, а MCG добавит все отдельные маркеры. Но воздерживаться от добавления/удаления этих групп слоев на/из карты позже!
Трудная часть заключается в том, что вы хотите, тем не менее, динамически добавлять/удалять определенный тип маркеров с карты. Вместо того чтобы делать только map.removeLayer(layerGroupX);
, вам нужно будет перебрать все отдельные маркеры и удалить их с вашего MCG, например:
layerGroupX.eachLayer(function (marker) {
myMCG.removeLayer(marker);
});
Смотрите также this issue на плагином сайте MarkerClusterGroup по причинам, и некоторые дополнительные примеры. Сделайте обратное для добавления маркеров обратно в свой MCG.
Что касается пункта 2, просто обратитесь к разделу документации плагина Customising the Clustered Markers. В основном, вы используете опцию iconCreateFunction
при инициализации MCG. Вы передаете функцию, которая принимает один аргумент (например, cluster
), и вы можете использовать cluster.getAllChildMarkers();
, чтобы получить массив содержащихся маркеров в стиле кластера. Затем просто перебирайте этот массив, чтобы подсчитать количество каждого типа маркеров и создать соответствующий значок.
Вы также можете попробовать этот плагин: q-cluster. Но он не оживляет, поэтому он намного меньше глазных конфет, чем MCG ...