Клуб API Карт

Проблемы с удалением меток

constantine.korikov
31 июля 2010, 14:02

 

Код ниже

//массив меток
var arrPoints = [];
//добавляю метку
  var placemark = new YMaps.Placemark(new YMaps.GeoPoint(координата №1, координата №2));
         placemark.name = ИМЯ;
         placemark.description = ОПИСАНИЕ;
         map.addOverlay(placemark); 
         arrPoints.push(placemark);
 
//удаляю метку 
var placemark = arrPoints[индекс метки в массиве];      
                    map.removeOverlay(placemark);   
                    arrPoints=arrPoints.removeByValue(placemark);
      
//поправка к классу Array
Array.prototype.removeByValue = function(item){
        var itemIndex = -1;
        for (var index = 0; index < this.length; index++)
        {
            if (this[index] == item){
                itemIndex=index;
            }
        }
       
        if (itemIndex == -1){
            return this;
        }
       
        var resultLeft = this.slice(0, itemIndex);
        var resultRight = this.slice(itemIndex+1, this.length);
        var resultTotal = resultLeft.concat(resultRight);

        return resultTotal;

 };

Проблема в том, что всё работает ОК, если в массиве 1 запись!  Если несколько - то весь код работает, кроме той части где удаляется метка с карты...

Подскажите: в чём может быть ошибка?


9 комментариев
Подписаться на комментарии к посту
Я добавляю маркер с индексом, тогда и удаление проще (хотя и не так гибко)
///глобально
var marker=[];
var mindex=0;

////метка
  var pmarker[mindex]= new YMaps.Placemark(new YMaps.GeoPoint(координата №1, координата №2));
  marker[mindex].name = ИМЯ;
  marker[mindex].description = ОПИСАНИЕ;
         map.addOverlay(marker[mindex]);


//// удаление

map.removeOverlay(marker[mindex]);
marker[mindex]=null;

и все, нет ни оверлея ни члена массива
в дальнейшем лишь нужно условие на
 marker[mindex]!=null
 при сохранении

 

constantine.korikov
31 июля 2010, 22:23
странно, но у меня ситуация аналогичная с вашим кодом: 1 метка - всё отлично, 2 метки и более - ничего!
Если изобретать велосипед забивая гвозди молотком такое бывает :)

Я так пологаю вы пытаетесь реализовать альтернативную реализацию:
indexOf и splice?

Но это не имеет никакого отношения к данному клубу.
constantine.korikov
2 августа 2010, 17:29
да не в этом суть. Часть с удалением элементов массива работает прекрасно.
Для каждой из меток заданы разные идентификаторы?

// Группа объектов
var group = new YMaps.GeoObjectCollection();
map.addOvelray(group);

// Добавление объектов в группу
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(35, 55));
placemark.name = "Имя объекта";
placemark.descriptoin = "Описание объекта";
group.add(placemark);

var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(32, 52));
placemark2.name = "Имя объекта 2";
placemark2.descriptoin = "Описание объекта 2";
group.add(placemark2);

// Удаление объектов
group.remove(placemark);
group.remove(placemark2);
constantine.korikov
2 августа 2010, 17:28

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


аналогичная ситуация и в коде Босонченко Андрея, только реализовано грубовато.

Код, который я привел должен работать. Попробуйте использовать его.

Если что-то не получится, то дайте ссылку на страницу.
constantine.korikov
2 августа 2010, 17:35

пока оставил использую решение в лоб:


удаляю все метки соответствующей процедурой и снова запускаю расстановку. Медленно для большого количества меток. Ну думаю вскоре разберусь.