Клуб API Карт

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

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

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

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

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

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

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

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

map.addOverlay(ml);

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

5 комментариев
Sergey Konstantinov
28 января 2016, 07:17
ml.setStyle({ hasHint: true });
После этого у всех объектов должна появится всплывающая подсказка. Текст подсказки по умолчанию будет браться из тэга .
Sergey Konstantinov
28 января 2016, 07:17
Или прямо в 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'ом Яндекс Карты.
Sergey Konstantinov
28 января 2016, 07:17
В таком случае нужно сделать примерно следующее:

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 файл) и реализовать выборку из базы Аяксом :)