Скрыть некоторые метки из коллекции

Рейтинг: 0Ответов: 2Опубликовано: 22.03.2023

На карту выводится множество меток. Пользователь выделяет группу меток, если нажимает ДА, то метки надо скрыть. Как это сделать? Пока что подумываю перерисовывать абсолютно все метки, за исключением тех, которые пользователь выбрал. Но может есть более гуманный метод?

Код добавления меток:

function addPlaces(placesArray)
{        
                                
    placesArray = JSON.parse(placesArray);
    
    for (var i = 0; i < placesArray.length; i++)
    {  
  
        myCollection.add(new ymaps.Placemark([placesArray[i][0], placesArray[i][1]], {id: placesArray[i][2] ));     
    
    } 
    myMap.geoObjects.add(myCollection);                                                         
}

Нашел, как добавить ИД к метке, добавил.

Но скрыть некоторые метки из коллекции никак не получается

Попробовал убрать маркеры таким образом

var myCollection = new ymaps.GeoObjectCollection();
var hideCollection = new ymaps.GeoObjectCollection();
var marker1 = new ymaps.Placemark([55.755814, 37.617635], {id: "marker1"});
var marker2 = new ymaps.Placemark([55.7522200, 37.6155600], {id: "MA-00051540"});
var marker3 = new ymaps.Placemark([55.753994, 37.622093], {id: "MA-00001754"});
myCollection.add(marker1);
myCollection.add(marker2);
myCollection.add(marker3);
myMap.geoObjects.add(myCollection);

var markersToHide = ["MA-00051540", "MA-00001754"];

myCollection.each(element => 
        {

        if( markersToHide.includes(element.properties.get('id'))) 
      { 
            hideCollection.add(element);        
        //console.log(element);
      }       
        });

Но, прячется только одна метка: введите сюда описание изображения

Ответы

▲ 1Принят

Если кому-то будет полезно. Пара часов с нулевым знаниям JS, но я победил. Пришлось делать через while, в добавок к each, т.к. при удалении метки в each коллекция каждый раз обновляется и сбиваются все индексы, что делает невозможным удаление остальных меток. markersToHide - это преобразованный в JSON массив элементов, где третье поле - переданный ИД объекта.

function hideMarkers(markersToHide)
{
    placesArray = JSON.parse(markersToHide);
    
    var i = placesArray.length;
    var j = 0;

    if (myCollection.length > 0 

    while (true)
        {
            myCollection.each(element => 
                {      
                    if( placesArray[j][2] === element.properties.get('id'))           
                        myCollection.remove(element);
                });
                
            if (j===i-1)
                break;
            else
                j++;
        }       
}
▲ 0

Объекты из коллекции удаляются, а не скрываются. Можно переносить в другую коллекцию, которую на карту просто не добавлять, чтобы объекты всё время сохранялись неподалёку.

Для этого нужно определять ID кликнутого объекта. Прямое удаление из коллекции можно выполнить так:

myMap.geoObjects.events.add('click', function (e) {
    var obj = e.get('target')
    var objID = myCollection.indexOf(obj)
    myCollection.remove(objID)
  });