Клуб API Карт

Как удалить с карты результаты (метки) гекодирования?

info2015-1
12 ноября 2015, 12:01

В примерах опубликован код https://tech.yandex.ru/maps/jsbox/2.1/direct_geocode.

 

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

 

Что вписать в код что б на карте всегда отображался только ОДИН, ПОСЛЕДНИЙ результат геокодирования?

 

10 комментариев

myMap.geoObjects.removeAll() перед каждым новым поиском

дополнил код, в консоли ошибка "TypeError: myMap.geoObjects.removeAll is not a function"

myMap.geoObjects.removeAll() - такой функции не существует?

 

код

function showAddress (value) {   

myMap.geoObjects.removeAll()
   
 ymaps.geocode(value, {      
        results: 1
    }).then(function (res) {
            // Выбираем первый результат геокодирования.                   
            var firstGeoObject = res.geoObjects.get(0),
                // Координаты геообъекта.
                coords = firstGeoObject.geometry.getCoordinates(),
                // Область видимости геообъекта.
                bounds = firstGeoObject.properties.get('boundedBy'),
                //тип геообъекта
                tp = firstGeoObject.geometry.getType();               
   
            // Добавляем первый найденный геообъект на карту.           
            myMap.geoObjects.add(firstGeoObject);
           // Масштабируем карту на область видимости геообъекта.       
           myMap.setBounds(bounds, {
                // Проверяем наличие тайлов на данном масштабе.
                checkZoomRange: true
            });

        });          
}

У вас какая версия АПИ подключена?

В 2.1 она есть

данная функция myMap.geoObjects.removeAll()  удаляет все геообъекты, а не только результаты поиска. в моем случае с карты пропадают вместе с метками - полигоны

 

как удалить только объекты с типом point?

Добавляйте результаты геокодирования в отдельную коллекцию и на ней вызывайте removeAll

ошибка   TypeError: myMap.myCollectionPoint is undefined

 

код с добавлением резульатов геокодирования в коллекцию и удалением элементов из коллекции

 

function showAddress (value) {   

myMap.myCollectionPoint.removeAll();
   
 ymaps.geocode(value, {      
        results: 1
    }).then(function (res) {
            // Выбираем первый результат геокодирования.                   
            var firstGeoObject = res.geoObjects.get(0),
                // Координаты геообъекта.
                coords = firstGeoObject.geometry.getCoordinates(),
                // Область видимости геообъекта.
                bounds = firstGeoObject.properties.get('boundedBy'),
                //тип геообъекта
                tp = firstGeoObject.geometry.getType();           



myCollectionPoint = new ymaps.GeoObjectCollection (); //создаем свою коллекцию меток
myCollectionPoint.add(firstGeoObject);   //добавим результат геокодирования на карту
myMap.geoObjects.add(myCollectionPoint); //добавим колекцию на карту

               
   
            // Добавляем первый найденный геообъект на карту.           
            //myMap.geoObjects.add(firstGeoObject);
           // Масштабируем карту на область видимости геообъекта.       
           myMap.setBounds(bounds, {
                // Проверяем наличие тайлов на данном масштабе.
                checkZoomRange: true
            });

        });          
}

 

Откуда в объекте myMap появится поле myCollectionPoint? Создавать и добавлять коллекцию надо вне функции showAddress.

Неплохо сначала познакомиться с основами JavaScript 

подскажите почему в данном коде из коллекции не удаляются объекты?

 

function showAddress (value) {   
 ymaps.geocode(value, {results: 1}) .then(function (res) {
            // Выбираем первый результат геокодирования.                   
            var firstGeoObject = res.geoObjects.get(0),
                // Координаты геообъекта.
                coords = firstGeoObject.geometry.getCoordinates(),
                // Область видимости геообъекта.
                bounds = firstGeoObject.properties.get('boundedBy'),
                //тип геообъекта
                tp = firstGeoObject.geometry.getType();       
           
            // Добавляем первый найденный геообъект на карту.           
            //myMap.geoObjects.add(firstGeoObject);          
         
           // Масштабируем карту на область видимости геообъекта.       
           myMap.setBounds(bounds, {
                // Проверяем наличие тайлов на данном масштабе.
                checkZoomRange: true               
            });    
        callback(firstGeoObject);   
        }); 
};
 
//добавим результат геокодирования на карту
function callback(r){
    myCollectionPoint = new ymaps.GeoObjectCollection();
    myCollectionPoint.removeAll();   
    myCollectionPoint.add(r);
    console.log (myCollectionPoint.getLength());
    myMap.geoObjects.add(myCollectionPoint);
    };

 

 

myCollectionPoint = new ymaps.GeoObjectCollection();    myCollectionPoint.removeAll();   

 

 

Тут вы создаете новую пустую коллекцию, и удаляете из нее ничего. Указатель на старую коллекцию вы теряете таким образом и ничего из нее не удаляется

Спасибо