Подсчет элементов в MarkerCluster - PullRequest
1 голос
/ 05 ноября 2019

Итак, у меня есть несколько магазинов в виде слоев на моей карте. Все мои магазины добавляются в MarkerCluster, а этот добавляется на карту, все работает нормально. Но я хочу отобразить краткую информацию о магазине, когда он находится в моем viewPort.

С обычными магазинами (слоями) это работало с первой попытки, но кластерная группа не работает :( Я начал с этого:

map.eachLayer(function(layer)

но это не просто дало мне магазины, но и многое другое. Поэтому я пошел дальше:

if(map.getBounds().contains(layer.getLatLng()))

, и это сработало как задумано.

Не так с Clusterers. Я пробовал перебирать такие вещи:

$.each(layer._childClusters[0]._markers, function()
{
    var element = this;

    if(map.getBounds().contains(element.getLatLng()))
    { ....

Но это просто не сработает. Иногда я получаю кластеризованную группу (состоящую из 4 хранилищ) как 1 слой ... и одинstore. Иногда 40.

Каков наилучший способ определения хранилищ внутри самого кластера?

1 Ответ

0 голосов
/ 05 ноября 2019

Вы должны иметь возможность циклически проходить по отдельным дочерним маркерам в вашей группе кластеров маркеров или получать массив этих дочерних маркеров. Затем вы можете сделать то же самое в первом примере, возможно, отфильтровав их в окне просмотра, как во втором примере.

const mcg = L.markerClusterGroup();
mcg.addLayers(arrayOfMarkers);

// Loop through the child Markers:
mcg.eachLayer(function (layer) {
  if (map.getBounds().contains(layer.getLatLng())) {
    // Do something...
  }
});

// or get all child layers:
const childMarkers = mcg.getLayers();
...