Клуб API Карт

вопрос по YMaps.SearchControl

Пост в архиве.
dmit-de
4 апреля 2010, 19:11

Как сделать так чтобы в YMaps.SearchControl по событию Select метка не появлялась, а просто открывался бы участок карты соответствующий выбранному адресу?

А потом нужно уже ранее созданную метку перетащить на это место.

9 комментариев
Элементу управления YMaps.SearchControl можно задать параметр noPlacemark в значение true. В таком случае метка не будет ставиться.

Вашу задачку можно решить примерно так:
// Ранее созданная метка
var placemark = new YMaps.Placemark(map.getCenter);

// Создаем элемент управления "Поиск по карте" и добавляем его на карту
var search = new YMaps.SearchControl( { noPlacemark : true } );
map.addControl(search);

// При выборе результата сдвигам метку в новое положение
YMaps.Events.observe(search, search.Events.Select, function (search, geoResult) {
    placemark.setGeoPoint(geoResult.getGeoPoint());
});
Спасибо!

А как тоже самое проделать с GeolocatorButton ?

попробовал, но что-то не получается...

            var toolBar = new YMaps.ToolBar();
            var geolocator = new GeolocatorButton();

            YMaps.Events.observe(geolocator,   geolocator.Events.GeolocationLoad, function() { alert('loaded'); } );

            toolBar.add(geolocator);
            map.addControl(toolBar);

что не правильно? кнопка работает, координаты определяются, но слушатель события не срабатывает.

в  функции создания кнопки генерируется событие

YMaps.Events.notify(this, "GeolocationLoad", point);

его и слушаем

В примере с GeolocatoButton закралася небольшая ошибка. Я уже исправил, по тому же адресу вы можете скачать обновленную версию, либо сами поправить:
// Нужно добавить знак подчеркивания перед _this
YMaps.Events.notify(_this, "GeolocationLoad", point);
 Все должно заработать.
 пример открыл,выдает ошибку таймаута
Такое происходит при частом обращении к сервису Geolocation.
Выставьте время жизни данных побольше, например 60000 мс. Тогда такое сообщение будет появляться редко или не появляться совсем.
Спасибо, кнопка заработала.

Но обработчик события не работает, изменения о которых говорилось ранее внесены.
Может в моем коде проблема?

            var toolBar = new YMaps.ToolBar();
            var geolocator = new GeolocatorButton();
            YMaps.Events.observe(geolocator, geolocator.Events.GeolocationLoad, function(){alert("GeolocationLoad");});
            toolBar.add(geolocator);
            map.addControl(toolBar);
А можете дать ссылку на страницу?
Вот так правильно ловить события для кнопки геолокатора:
YMaps.Events.observe(geolocator, "GeolocationLoad", function (point) {
    alert("GeolocationLoad");
});