Клуб API Карт

Вопрос по API Яндекс.Карт

fperet
20 июля 2010, 11:12

Имеется идея проекта, следующего вида:

Есть карта ФО. Карта разделена на области с помощью XML файлов. Как создать обработчик события, отличный от создания балуна на области, выводящий информацию об области.

Для наглядности поясню:

На карте СКФО при наведении на респ. Дагестан, чтобы выводилась информация о числености населения республики, основных видах деятельности,  руководителе области.

Конструкция такого вида не работает:

var ml = new YMaps.YMapsML("http://**/1.xml"); //(собственно оверлей, описывающий границы республики и ее визуальное представление на карте)

map.addOverlay(ml);

YMaps.Events.observe(ml, ml.Events.Click, function (){
  alert(" Республика Дагестан ");} );

5 комментариев
Подписаться на комментарии к посту
ml.setStyle({ hasHint: true });
После этого у всех объектов должна появится всплывающая подсказка. Текст подсказки по умолчанию будет браться из тэга .
Или прямо в YMapsML-файле можно задать стиль с включенной всплывающей подсказкой и даже шаблон её текста, см. здесь:
http://api.yandex.ru/maps/ymapsml/doc/guide/concepts/styles.xml
http://api.yandex.ru/maps/ymapsml/doc/guide/concepts/templates.xml
Эм... я извиняюсь что выразился не совсем точно. Мне по клику на области не нужна ни подсказка, ни балун. Мне нужно чтобы выполнялась моя функция (в отдаленной перспективе ajax'ом), ибо на данный момент все данные по областям находятся в базе. Пока неизвестно какого вида база, и что за информаия там есть. По клику на область информация вытаскивается из базы, и показывается под div'ом Яндекс Карты.
В таком случае нужно сделать примерно следующее:

var ml = new YMaps.YMapsML("http://**/1.xml"),
     listeners = [];

// слушаем событие загрузки YMapsML-документа
YMaps.Events.observe(ml, ml.Events.Load, function (res) {
     var collection = res.get(0);
     // Этот код перебирает все элементы коллекции
    collection.forEach(function (obj) {
         // Слушаем событие mouseenter
         listeners.push(
               YMaps.Events.observe(obj, obj.Events.MouseEnter, function () {
                 // Здесь код, который нужно выполнять
                 jQuery.ajax(...);
}
         );
    });
});
Большое спасибо, пример работает на ура. Теперь осталось только в цикле перебрать все области (на каждую область свой KML файл) и реализовать выборку из базы Аяксом :)