2015-10-15 4 views
2

В настоящее время я работаю над визуализацией карты с помощью плагина Leaflet. Я также использую плагин markercluster для группировки своих очков. Поэтому мой вопрос заключается в следующем: У меня есть 3 разных категории маркеров в 3 разных слоях. Например, ресторан/кафе и барный слой. И я хочу объединить все активные слои в конкретный кластер. На данный момент записи группируются отдельно, но я хочу сгруппировать их вместе. Следующим шагом будет окраска кластера в соответствии с childMarkers. Например. кластер включает в себя ресторан и барные маркеры => наполовину красные/наполовину зеленые, только рестораны => только красный и т. д.Cluster multiple layers with markercluster

Я надеюсь, что кто-то может помочь мне решить. Спасибо!

ответ

0

Вы упоминаете 2 различных запросов в вашем вопросе:

  1. Имея 3-х различных типов маркеров, но все должны группироваться вместе. Трудная часть - это если вы хотите скрыть/показать определенный тип (возможно, через Layers Control).
  2. Настройка внешнего вида кластеров на основе количества содержащихся в нем маркеров каждого типа.

Что касается пункта 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 ...