Клуб API Карт

Подскажите пожалуйста правильно ли я понимаю

Boarddog
28 октября 2012, 17:30

Добрый день. скажите правильно я понимаю. если у меня более 10 полигонов на карте. Мне необходимо чтобы при перемещении полигона, метки которые попадают в область полигона, меняли свой цвет, мне каждый полигон нужно создавать примерно таких способом:

 

 

myGeometry = {
type: 'Polygon',
coordinates: [
[
[55.75, 37.50],
[55.80, 37.60],
[55.70, 37.70]
]
]
},
myOptions = {
strokeWidth: 3,
strokeColor: '#0000FF',
// Прозрачность (полупрозрачная заливка)
opacity: 0.4,
fillColor: '#ff0042',
draggable: true
};

var myGeoobject = new ymaps.GeoObject({geometry: myGeometry}, myOptions);

myGeoobject.events.add('geometrychange', function (event) {
printGeometry(myGeoobject.geometry.getCoordinates());
| setActivePoints(collection,myGeoobject);
});

myMap.geoObjects.add(myGeoobject);

 

    и  для каждого полигона отслеживать перемещение? или можно это дело упросить? 

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

можно повесить один слушатель на коллекцию,

только слушать надо "dragend", а не "geometrychange"

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

Задача выделить все метки которые попали в полигоны.

                   function setActivePointsGEO (collection,collectionGEO) {

                   collectionGEO.each(function (objGEO) {

                   collection.each(function (obj) {

 

                      if (objGEO.geometry.contains(obj.geometry.getCoordinates())) {

                           obj.options.set(""preset"",""twirl#greenIcon"");

                        } else {

                           obj.options.set(""preset"",""twirl#lightBluePoint"");

                        }

                          });

                     });

 

                       }

 

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

|                   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"",""twirl#greenIcon"");

|                        } else {

|                           obj.options.set(""preset"",""twirl#lightBluePoint"");

|                        }

|                      });

 

    |                   }

 

Сделал пока так