Клуб API Карт

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

s.dreval
18 июля 2012, 12:19

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

 

    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)

Константин Рогаткин
18 мая 2013, 12:37

 

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

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

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

   map.geoObjects.remove(event);

});

 

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

 

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

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

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

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

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

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/control.SearchControl.xml
Константин Рогаткин
19 мая 2013, 13:19

Когда сделал 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 на карте