Клуб API Карт

Polygon onclick

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

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

 

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

17 комментариев

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

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

    console.log('polygon clicked');

});

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

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

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

Александ Арбузов
28 января 2016, 04:30

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

 

 

// вызов фунции для вывода многоугольников, // где они и формируются с помощтю 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()
Александ Арбузов
28 января 2016, 04:30

Возвращает 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;                },



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

 

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

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

Александ Арбузов
28 января 2016, 04:30

 

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 все несколько иначе, чем например в пхп
Александ Арбузов
28 января 2016, 04:30

myCollection.add(

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

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

        ........

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

)


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

Александ Арбузов
28 января 2016, 04:30

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

 

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

 

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

 

Спасибо. 

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

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

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

 

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

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

добавь поле id в properties каждого полигона и вытаскивай его в обработчике
Александ Арбузов
28 января 2016, 04:30

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

Александ Арбузов
28 января 2016, 04:30

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

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

 

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