Клуб API Карт

Вопрос по метке в SearchControl

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

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

 

    searchControl = new this.ymaps.control.SearchControl({
        resultsPerPage: 5, 
        useMapBounds: 1,    
        width: widthSearchControl
    });

 думал воспользоваться        

noPlacemark: true

но так ни метки, ни балуна нет, а нужен хотя б открытый балун, что если его закрыть, то ничего лишнего небыло на карте

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

В этой ветке написано как получить выбранный геообъект

http://clubs.ya.ru/mapsapi/replies.xml?item_no=24390

Полученный геообъект можно удалить с карты через map.geoObjects.remove(obj)

Константин Рогаткин
28 января 2016, 04:09

 

search.events.add("resultselect", function(e) {

   var index = e.get("resultIndex");

   var event = searchForm.getResultsArray()[index];

   map.geoObjects.remove(event);

});

 

Но метка остается. 

 

надо понимать что при каждом новом поиске  event будет указывать на новый геообъект. Можно сохранить ссылку на результат предыдущего поиска в родительском scope  и удалять ее.
Константин Рогаткин
28 января 2016, 04:09

Зачем мне предыдущий геообьект, если мне нужно удалить текущий (сразу после поиска, когда он создали).

Не понял зачем удалять текущий сразу после поиска. Может его вообще не отображать на карте?
Константин Рогаткин
28 января 2016, 04:09

Мне нужно, чтобы карта переместилась к этому балуну, потом удалить его и на его месте вывести свой.
А если вообще не выводить, тогда карта не передвинется. И я не буду знать координаты балуна поиска.

То что Вы в вашем коде почему-то назвали "event" на самом деле - геообъект. Вы можете взять у него координаты и создать по ним свою метку. За передвижение карты к найденному результату отвечает опция "noCentering" за наличие метки опция "noPlacemark".

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/control.SearchControl.xml
Константин Рогаткин
28 января 2016, 04:09

Когда сделал noPlacemark: true, noCentering: false, то перестало вызываться событие resultshow. А это событие вызывалось сразу после перемещение карты и я получал координаты показанной части карты.
Сейчас получаю через:

searchForm.events.add("resultselect", function(e) {

  var index = e.get("resultIndex");

  var result = searchForm.getResult(index);

 

  result.then(function(res) {

    alert(res.properties.get("boundedBy"));

  });

});

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

надо тогда слушать boundschange на карте