Клуб API Карт

почему не работает res.geoObjects.each ?

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

 

function init() {

var geolocation = ymaps.geolocation,myMap = new ymaps.Map('map', {

            center: [45.066017, 38.955721],

            zoom: 14

 });

 

var objects = ymaps.geoQuery(

ymaps.geocode('Адыгейск, ул. Ленина, 18'))

.add(ymaps.geocode('Яблоновский, ул. Гагарина, 151/1'))

.add(ymaps.geocode('Майкоп, ул. Депутатская МКР 2, магазин 45')) // ... 

.addToMap(myMap);

console.log("init ok");


objects.then(


function (res) {

console.log("result ok");

res.geoObjects.each(function(obj){
console.log("object ok -" + obj.properties.get('name'));
});
...
},

function (err) {console.log("result error");}

);

myMap.behaviors.disable('scrollZoom');
}



Здравствуйте, не понимаю, почему не заходит в цикл res.geoObjects.each ?

в консоле init ok , result ok и ошибок нет :(

 

7 комментариев
Sergey Konstantinov
27 января 2016, 22:52
Вы делаете then на результате выполнения geoQuery, вам в обработчик придёт непосредственно коллекция объектов. Т.е. "geoObjects" лишний, пишите просто res.each
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoQueryResult-docpage/

Спасибо, но почему-то не помогает.

Результат тот же.

Ситуация меняется только если так:

myMap.geoObjects.each

но тут лишние объекты (города и улицы) и не понятно как их отсеять.

и еще вопрос )

а можно ли внутри этого цикла изменить свойства объекта,  а именно изображение иконки? пока не работает :(

obj.properties.set('iconImageHref', 'ico.png')

.set('iconImageSize', [77, 72])

.set('iconImageOffset', [-20, -62]);

Sergey Konstantinov
27 января 2016, 22:52
Должно работать.
Соберите живой пример на jsfiddle.net, например

не работает (

не входит в цикл (

вот на фидле:

http://jsfiddle.net/selff07/w54au5a1/6/

вот на живом примере

http://cg06703.tmweb.ru/yamap.html

 

Sergey Konstantinov
27 января 2016, 22:52
Во-первых, then не резолвится инстанцией GeoQueryResult, нужно продолжать использовать objects
Во-вторых, стили 'twirl#...' в API 2.1 не перенесены, таких иконок нет. Определение своей иконки тоже изменилось.

У меня вот так заработало:

ymaps.ready(init);
function init() {
var geolocation = ymaps.geolocation,
    myMap = new ymaps.Map('map', {
        center: [45.066017, 38.955721],
        zoom: 14
    });
var objects = ymaps.geoQuery(ymaps.geocode('Адыгейск, ул. Ленина, 18'))            .add(ymaps.geocode('Краснодар, ул. Атарбекова, 7'))
.add(ymaps.geocode('Краснодар, ул. Зиповская, 10'))
.add(ymaps.geocode('Краснодар, ул. Игнатова, 55'))
.add(ymaps.geocode('Краснодар, ул. Карасунская, 83'))
.add(ymaps.geocode('Краснодар, ул. Мира, 50'))
.add(ymaps.geocode('Краснодар, ул. Сормовская, 177'))
.add(ymaps.geocode('Краснодар, ул. Ставропольская, 234'))
.add(ymaps.geocode('Краснодар, ул. Стасова, 180/2'))
.add(ymaps.geocode('Краснодар, ул. Уральская, 9'))
.add(ymaps.geocode('Краснодар, ул. Проспект Чекистов, 19'))
.add(ymaps.geocode('Краснодар, ул. Шоссе Нефтяников, 4') );
console.log("init ok");
objects.then(
function () {
    objects.each(function (obj) {
        console.log("object ok -" + obj.properties.get('name'));
        obj.options.set({
            preset: 'islands#redCircleIcon',
        });
    });
    objects.addToMap(myMap);
},
function (err) {
    console.log("result error");
});
}

Спасибо за помощь!

Ага, а для своих иконок надо еще добавить

iconLayout: 'default#image',