Клуб API Карт

[Решено] Удаление конкретной метки с карты

Пост в архиве.
linfo2006
22 сентября 2013, 06:25

Добрый день!

 

Сколько не смотрел примеры по API карт, но так и не набрел на способ удаления одной метки из области меток.

Итак, исходные данные: есть группа меток, необходимо одну метку удалить.

Способ удаления: нажимается контексное меню и выбирается пункт "удалить метку".

Как это делается?

 

Я понимаю что нужно воспользоваться функцией map.geoObjects.remove(object), но как определить этот объект?

на данный момент код такой            

   placemark.events.add('contextmenu',function(e){
                    var objectid = e.get('target').properties.get('id');
тут создается контексное меню, в котором есть пункт удалить
                 });
как передать ссылку на объект, чтобы можно было потом удалить эту метку?
UPD 1:нашел такой образец:
DriverCollection.each(function (item) {
        if (item.properties.get('name') == idDriver) {
            //item.geometry.setCoordinates([latitude, longitude]);
            DriverCollection.remove(item);
        }
    });
 
Переделал под себя
 myMap.geoObjects.each(function (item) {
        if (item.properties.get('id') == objectid) {
            myMap.geoObjects.remove(item);
        }
    });
 но он не работает, утверждая что у объекта item нет таких свойств
UPD 2: это все мои кривые руки. Вот так правильно:
  myMap.geoObjects.each(function (item) {
        if (typeof item.properties != 'undefined') {
             if (typeof item.properties.get('id') != 'undefined') {
                  if (item.properties.get('id') == objectid) {
                       myMap.geoObjects.remove(item);
                  }
             }
         }
    });
 Возможно громоздко, но зато работает удаление метки )
2 комментария

 По-моему, вы исправляете следствие, а не причину бага.

Раз скрипт утверждает, что, что у объекта нет свойства id, то вы сначала проверьте тот фрагмент, где это свойство добавляется каждой метке и убедитесь, что оно есть у каждой метки и имеет нужное значение.

А то как-то неравномерно получается - у этих меток есть, у тех нет. Если так и задумано - раскидайте их по разным коллекциям  и обрабатывайте по-разному

дело в том что у всех меток есть ид:

вот код при создании метки:

placemark = new ymaps.Placemark(portal.center,
                {
                    balloonContentHeader: 'Портал: '+portal.name,
                    balloonContentBody: address+image+htmlspecialchars_decode(portal.desc, 'ENT_QUOTES'),
                    id: portal.id,
                iconContent: portal.level,
                },{
                iconImageHref: '{IF}/images/fraction/'+icon+'.png',
                iconImageSize: [30, 30],
                iconImageOffset: [-15, -15],
            });

 

соответственно переменную portal.id он берет из набора JSON-данные, которые перебираются перебором по этому же самому ID

 

но факт остается фактом, у некоторых элементов на карте нет ИД, я думаю таким элекментом является сам Cluster, в который вставлены все метки