Клуб API Карт

События колекции полигонов

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

Добрый день. Подскажите пожалуйста имею коллекцию полигонов.  и коллекцию меток.  задача выделить цветом метки попавышие в полигоны. 

 

 collectionGEO.events.add('geometrychange', function (event) { ....}   не подходит так как при окончании перетаскивания вершины полигона  имеем старые координаты вершины.

Помогите пожалуйста.

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

Посмотрите вот этот пример http://api.yandex.ru/maps/jsbox/2.1/placemarks_in_circle

я видел этот пример, он мне не чем не помог так как у меня коллекция и события окончания редактирования вершин.

Вы редактируете полигоны и хотите, чтобы попадание меток пересчитывалось после промежуточного редактирования?

что бы по окончанию редактирования вершины полигона, метки изменяли цвет ,те что попали в полигоны

 

collection - колекция меток

collectionGEO колекция полигонов

Это работает но не так как надо, дело в том что при срабатывании этого события я получаю страые координаты полигонов

 // При окночании перемещения.
                collectionGEO.events.add('geometrychange', function (event) {
                    setActivePointsGEO(collection,collectionGEO);
                });

 

    /////////////////////////----------------------------- Функция проверяет входит ли метки в область
      function setActivePointsGEO (collection,collectionGEO) {
           var flag;
           collection.each(function (obj) {
            flag = 0;
           collectionGEO.each(function (objGEO) {
              if (objGEO.geometry.contains(obj.geometry.getCoordinates())) {
               flag = 1;
              

                }
              });
               if (flag == 1) {
                   obj.options.set("preset","islands#darkGreenIcon"); 
                } else {
                   obj.options.set("preset","islands#redIcon");
                }   
              });
           } // конец функции

Добрый день! Не могли бы вы дать ссылку на рабочий пример? Дело в том, что старых координат быть не должно. И я такой проблемы у себя не наблюдаю. Также непонятно как вы используете события завершения редактирования.

Пример к сожалению не смогу все локально.

Вот иду в лоб

                collectionGEO.events.add('geometrychange', function (event) {
             
                  var myPolygon = event.get('target');
               
                   alert(myPolygon.geometry.getCoordinates());
                });

 

Получаю координаты новые но при использовании contains получаю старые данные.

Где obj метка

myPolygon.geometry.contains(obj.geometry.getCoordinates())

 

Проблема скорее всего в том, что contains работает с пиксельной геометрией, а она в этот момент еще не обновлена. У геометрии геообъекта есть событие pixelgeometrychange, которое сигнализирует об обновлении пиксельной геометрии. Вот по нему надо делать этот расчет, но его нужно слушать на каждой геометрии геообъекта отдельно, а не на коллекции, т.к. это событие именно геометрии, а не геообъекта.

Не подскажите как слушать на каждый геообъект если у меня коллекция?

 

Можно слушать на коллекции события add remove и на event.get('child').geometry навешивать или соответственно удалять слушание pixelgeometrychange.

Знаете как нужно сделать?