Здравствуйте.
Подскажите, пожалуйста, как выводить подписи (адреса) у меток, полученных с помощью множественного геокодирования.
Я брал за основу этот пример.
Вот мой адаптированный вариант вышеуказанного примера.
<script type="text/javascript"> // Создание обработчика для события window.onLoad YMaps.jQuery(function () { // Создание экземпляра карты и его привязка к созданному контейнеру var map = new YMaps.Map(YMaps.jQuery("#YMapsIDd")[0]); map.setCenter(new YMaps.GeoPoint(39.887714, 57.622506), 10); var traffic = new YMaps.Traffic.Control(); var zoom = new YMaps.Zoom({smooth: true}); map.addControl(new YMaps.Zoom(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT), new YMaps.Point(10, 10)); map.addControl(traffic, new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Point(5, 5))); traffic.setState({ shown: true, // элемент управления развернут, пробки показаны infoLayerShown: true }); // Координаты или адреса географических объектов var data = ["г. Ярославль, Ленинградский пр-т, 49а", "г. Ярославль, Московский пр-т, д. 108" ]; var geocoder = new MultiplyGeocoder(data); map.addOverlay(geocoder); YMaps.Events.observe(geocoder, "Load", function (geocoder) { }); }); // Реализует наследование прототипа без исполнения конструктора родителя // Подробнее о наследовании: http://javascript.ru/tutorial/object/inheritance function extend (child, parent) { var c = function () {}; c.prototype = parent.prototype; c.prototype.constructor = parent; return child.prototype = new c; }; // Множественный геокодер // requests - массив адресов function MultiplyGeocoder (requests) { // Вызов родительского конструктора YMaps.GeoObjectCollection.call(this); var _this = this, // Количество вызовов геокодера geocodeCallCount = 0, // Обработчики событий listeners = []; // Последовательно геокодируем все переданные адреса for (var i = 0, l = requests.length; i < l; i++) { geocode(requests[i]); } // Функция, отвечающая за геокодировании одного адреса function geocode (request) { // Геокодируем var geocoder = new YMaps.Geocoder(request); // Счетчик вызовов геокодирования увеличиваем geocodeCallCount++; // Сохраняем ссылки на обработчики событий listeners = listeners.concat( // Обработка событий Load и Fault YMaps.Events.observe(geocoder, [geocoder.Events.Load, geocoder.Events.Fault], function (geocoder) { if (geocoder.length()) { _this.add(geocoder.get(0)); } geocodeCallCount--; isFinish(); }) ); } // Функция для проверки окончания процесса геокодирования function isFinish () { // Если все объекты сгеокодированы, то генерируем событие завершения if (!geocodeCallCount) { // Событие о завершении геокодирования YMaps.Events.notify(_this, "Load", _this); // Удаление обработчиков событий for (var i = 0, l = listeners.length; i < l; i++) { listeners[i].cleanup(); } } } } var ptp = extend(MultiplyGeocoder, YMaps.GeoObjectCollection); </script>
Данные для геокодирования задаются динамически. Адреса берутся из базы данных.