Клуб API Карт

Polygon onclick

Namolem
8 июня 2012, 18:35

Добрый день. Подскажите пожалуйста, как сделать открытие popup окошка, при нажатии на Polygon

 

То есть примерно как метка, только вместо "кнопки" должен быть полигон.

17 комментариев
Подписаться на комментарии к посту

Нужно слушать событие клика на полигоне и выполнять свой js-код

_your_polygon_var_name_.events.add('click', function () {

    console.log('polygon clicked');

});

А popup рисовать свой или в api есть что-то ?

в АПИ попапов нет, есть балуны,

не знаю подойдут ли они вам

А как  мне слушать событие клика, если у меня сначала по нажатию на кнопку выводится коллекция полигонов. 

 

 

// вызов фунции для вывода многоугольников, // где они и формируются с помощтю ajax . Данные берутся из БДvar myCollection = PolygonData.myCollectionPolygon();       // обработчик произвольной кнопки, по нажатию на которую        // происходит вывод многоугольников        $('.ShowAllDistrict').bind('click', function(){            myMap.geoObjects.add(myCollection);  //выводим коллекцию на карту            // myExistPolygon - развание полигонов, которые добавляются в коллекцию            // обработчик.             myCollection.myExistPolygon.events.add('click', function(){                alert('data');            });        });Собственна проблема очевида, все полигоны имеют одно и тоже название и обработчик myCollection.myExistPolygon.events.add('click',  .... срабатывает только по нажатию на последний добавленный на карту полигон. 

 

 

не понятно что у Вас возращает myCollectionPolygon()

Возвращает myCollection


после чего я могу сделать 

 

myMap.geoObjects.add(myCollection);  


 

            myCollectionPolygon: function(){                // Создаем коллекцию геообъектов.                var myCollection = new ymaps.GeoObjectCollection();                $.post('/settings/thisCoordinate', function(data){                    $.each(data, function(i, v){                        var coordinate = JSON.parse(v.coordinate);                        myCollection.add(myExistPolygon = new ymaps.Polygon(coordinate, {}, {                                  //balloonContentLayout: 'my#simplestBCLayout',                                  fillColor: v.background,     // цвет заливки                                  strokeColor: v.border_color,      // цвет границы                                  opacity: v.opacity, // степень прозрачности заливки                                  strokeOpacity: v.opacity,  // степерь прозрачности границ                                  strokeWidth: v.border_width,      // толщина линии                                   //draggable: true               // созданный полигон можно передвинуть                        }));                    });                                    }, 'JSON');                return myCollection;                },



ты чтото очень станное делаешь. Очевидно что в момент когда твоя функция отработает никаких элементов в ней не будет.
Впрочем имя твоей переменной тут не при чем. Геообъектам в коллекции надо получать доступ через ее интерфейс

 

Геообъектам в коллекции надо получать доступ через ее интерфейс

Буду благодарен хотя бы за одну ссылочку. Спасибо. 

 

var myCollection = new ymaps.GeoObjectCollection();                $.post('/settings/thisCoordinate', function(data){                    $.each(data, function(i, v){                        var coordinate = JSON.parse(v.coordinate);                        myCollection.add(myExistPolygon = new ymaps.Polygon(coordinate, {}, {

В этом кусочке кода я в цикле добавляю геообъекты в коллекцию, чтобы эту коллецию целиком вывести на экран. Что странного?  

Мне каким-то образом надо потом для каждого из элементов прописать onclick, чтобы для каждого из многоугольников в коллекции появлялся свой balloon, в котором буду заполнены поля формы именно для того многооугольника, на который я нажал. 

странно что ты после $.post() в след. строке
эту коллекцию возвращаешь и пытаешься повесить обработчики на те элементы которые в нее добавил. На самом деле ты возвращаешь пустую коллекцию, а элементы в нее добавятся уже после (асинхронно) в javascript все несколько иначе, чем например в пхп

myCollection.add(

        new ymaps.Polygon(coordinate, {...}, {...}); 

        new ymaps.Polygon(coordinate, {...}, {...}); 

        ........

        new ymaps.Polygon(coordinate, {...}, {...}); 

)


Это отличается от того что, то написано у меня? 

Ладно, вы мне очень сильно поможете, есть дадите хоть один, хотя бы приблизительный пример решения моей проблемы. 

 

Задача, вывести коллецию, которая состоит из ряда полигонов, при клике на который должен появиться balloon, содержащий информацию о соответствующем полигоне. 

 

Вывод информации о полигоне происходит из БД. 

 

Спасибо. 

ты можешь подписатся на клик на коллекции и в обработчике клика получить тот полигон по которому кликнули через e.get('target')

Не могу сообразить, что можно достать из e.get('target'), чтоб потом привязаться.

Например id, чтобы далее по этому id вытащить из БД инфу. 

 

            myCollection.events.add('click', function (e) {                var object = e.get('target');            });

куда дальше то двигаться? где об этом в мануле то написано. 

добавь поле id в properties каждого полигона и вытаскивай его в обработчике

Спасибо. Сейчас буду пробовать

Большое спасибо. Всё получилось. Вы мне очень помогли. 

Вот что получилось: 

 

myCollection.events.add('click', function (e) {                var object = e.get('target').properties.get('id');                alert(object);            });