Клуб API Карт

Удаление placemark

Пост в архиве.

 

function getcoder_now(value) {
myGeocoder = ymaps.geocode(value, { results : 1 });
myGeocoder.then(
function (res) {
var point = res.geoObjects.get(0);
var placemark = new ymaps.Placemark(point.geometry.getCoordinates(), {balloonContent: "text"}, {draggable: true});
   myMap.geoObjects.add(placemark);
myMap.geoObjects.events.add("drag", function (event) {
   document.getElementById("coords").value = placemark.geometry.getCoordinates();
});
       console.log(point.geometry.getCoordinates());
   },
   function (err) {
       alert("Error");
   }
);
};

Подскажите, как удалить старые placemark после каждого вызова getcoder_now?

Т.е. при выхове функции отображается на карте placemark затем, нужно еще раз вызвать, и появляется еще один, нужно сделать очистку перед добавление placemark на карту, не могу вспомнить как это реализовать?

7 комментариев
myMap.geoObjects.remove(placemark);

только надо запоминать чего вы добаляли.

Дя эого удобно использовать коллекции.

проблема в том, что я не понимаю куда егу всунуть

добавил 

 

 

myMap.geoObjects.add(myCollection);var point = res.geoObjects.get(0);var placemark = new ymaps.Placemark(point.geometry.getCoordinates(), {balloonContent: "text"}, {draggable: true});myCollection.removeAll();myCollection.add(placemark);

но функция перестала добавлять placemark

вот написал, но получил тот же вариант, что и был изначально: placemark добавляются и старые остаются...

 

myGeocoder = ymaps.geocode(value, {   results: 1});myGeocoder.then(function (res) {   myCollection = res.geoObjects;   var point = res.geoObjects.get(0);   var placemark = new ymaps.Placemark(point.geometry.getCoordinates(), {       balloonContent: "text"   }, {       draggable: true   });   myCollection.removeAll();   myMap.geoObjects.add(myCollection);   myCollection.add(placemark);   myMap.geoObjects.events.add("drag", function (event) {       document.getElementById("coords").value = placemark.geometry.getCoordinates();   });   console.log(point.geometry.getCoordinates());}, function (err) {   alert("Error");});

Вы совсем совсем не понимаете что рисуете.

 

ymaps.geocode(value, {   results: 1});myGeocoder.then(function (res) {   if(window.lastPoint) myMap.geoObjects.remove(window.lastPoint);   var point = res.geoObjects.get(0);   var placemark = window.lastPoint=new ymaps.Placemark(point.geometry.getCoordinates(), {       balloonContent: "text"   }, {       draggable: true   });   myMap.geoObjects.add(placemark);   placemark.events.add("drag", function (event) {       document.getElementById("coords").value = placemark.geometry.getCoordinates();   });   console.log(point.geometry.getCoordinates());}, function (err) {   alert("Error");});

Должно как-то работать.

Но геокодер вообще сам по себе коллекцию возврашает, и там уже плейсмарки.

Зачем вы тут создаете новые.....

то что лишнее я понимаю, дело в том, что я не понимаю как применить этот removeAll

myMap.geoObjects.events.add("drag", function (event) {
    document.getElementById("coords").value = placemark.geometry.getCoordinates();
});
function getcoder_now(value) {
    var myGeocoder = ymaps.geocode(value, { results : 1 });
    var placemark = myGeocoder.getIterator().getNext();
    if(placemark==null){
        alert('error');
    }
    else{
        myMap.geoObjects.each(function(obj){
            myMap.geoObjects.remove(obj);
        });
        placemark.properties.set({balloonContent:'text'});
        placemark.options.set({draggable:true});
        myMap.geoObjects.add(placemark);
        console.log(placemark.geometry.getCoordinates());
    }
};

Наверное как-то так. Устанавливать эвент на карту каждый раз при вызове функции не стоит, лучше установить только один раз при инициализации. Ну либо эвент не на myMap.geoObjects , а на placemark. ymaps.geocode(value, { results : 1 }) возвращает коллекцию геообъектов, поэтому нет смысла извлекать оттуда какие-то данные чтобы создать новую метку на основе этих данных, лучше изменить нужные данные у той метки которая вам вернулась(здесь для одной метки, но myGeocoder.getIterator().getNext(); можно вызывать в цикле в случае если у вас больше 1 метки).