Клуб API Карт

Найти коллекцию всех полигонов на карте

alexlip1972.usachev
20 июня 2013, 09:40

Есть карта - на ней нарисованы несколько полигонов - подскажите как мне пробежаться по всем полигонам этой карты и найти , например хинт. Пытался сделать так - неполучается.

 

 map.geoObjects.each(function (item) {
                            var name = item.properties.get('hintContent');
                            alert(name);
                            })

 

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

Удобнее будет если ваши полигоны будут в геоколлекции, тогда:

myPolygonCollection.each(function (item) {
                            var name = item.properties.get('hintContent');
                            alert(name);
                            })

Сейчас скорее всего у вас есть на карте другие объекты и у них в проперти нету хинта, или же

 

map.geoObjects.each(function (item) {
                 if(item.geometry.getType() == "Polygon"){
                            var name = item.properties.get('hintContent');
                            alert(name);
                 }
                            })

Что вы понимаете под "найти хинт"? Если вы хотите узнать показан ли хинт на конкретном полигоне, то у него надо спросить

polygon.hint.isShown()

alexlip1972.usachev
20 июня 2013, 13:22

Я формирую полигоны на карте из XML

res77=ymaps.geoXml.load(url)
                           .then(function (res77) { 
                                myPolygonCollection.add(res77.geoObjects);
                                myMap.geoObjects.add(myPolygonCollection);
                                myPolygonCollection.each(function (item) {
                                var name = item.properties.get('name');
                               var points_t =$("#geometry").text();
                               item.options.set('hintContentLayout', 'my#superlayout');
                               и т.д.

затем по кнопке выбрать полигон - лезу в базу - выбираю конкретный полигон(кнопка селект) и хочу на нем спозиционироваться - то есть пробежаться по всей коллекции полигонов и найти конкретный (по имени, хинту или еще чему-нибудь)

$("select").change(function () {           
                var town = $("#selectsos :selected").val();   
                do_find(town, myMap, myPolygonCollection);       

а у меня конструкцияв функции поиска do_find

myPolygonCollection.each(function (item) {
                            var namep = item.properties.get('hintContent');
                            alert(namep);
                            })  выдает undefined

 

Скорее всего проблема в том, что в myPolygonCollection вы добавляете не полигоны, а коллекцию полигонов. Эта коллекция не раскрывается сама при добавлении в myPolygonCollection. Соотв. итерируя по myPolygonCollection вы сокрее всего в item получаете коллецию, а не полигоны.

alexlip1972.usachev
20 июня 2013, 13:48

проблема в том, что когда я добавляю так

res77.geoObjects.each(function (item) {                            myPolygonCollection.add(item);             })

- у меня половина полигонов не добавляется.

А как мне "раскрыть" коллекцию, чтобы в итем получить элементы?

Так работает each, если в нем удалять элементы из коллекции. Это нормально, так работает each и для обычного массива.

Переберите коллекцию через while (res77.geoObjects.getLength())

alexlip1972.usachev
20 июня 2013, 14:41

Спасибо! Все получилось.