Клуб API Карт

исчезают метки при установке видимой области карты

amarieea91
21 марта 2015, 12:50

Здравствуйте! 

Добавляю метки через objectManager. В objectManager включена кластеризация. После добавления меток хочу установить видимую область карты по добавленым меткам таким образом:

 var bounds = ymaps.geoQuery(objectManager.objects).getBounds();

    myMap.setBounds(bounds);

Проблема в том, что видимая область карты устанавливается верно, но сами метки не видны. Видны только кластеры. Метки же появляются после изменения зума карты.

 

function initMap() {

    objectManager = new ymaps.ObjectManager({

        clusterize: true,

        groupByCoordinates: true,

        gridSize: 32,

    });

 

    var coords = { Lat: 53.8993, Lng: 27.5622, Zoom: 6 };

    myMap = new ymaps.Map("map", {

        center: [coords.Lat, coords.Lng],

        zoom: coords.Zoom,

        behaviors: ['default', 'scrollZoom']

    });

}

 

function addPlacesToMap(places) {

    objectManager.add(places);

    objectManager.objects.options.set({

        iconLayout: 'default#image',

        iconOffset: [0, 0],

        balloonCloseButton: true,

        balloonPanelMaxMapArea: 'Infinity',

        preset: ''

    });

    myMap.geoObjects.add(objectManager);

    var bounds = ymaps.geoQuery(objectManager.objects).getBounds();

    myMap.setBounds(bounds);

}

 

5 комментариев
Всеволод Шмыров
21 марта 2015, 12:56
Добрый день. Компонент geoQuery не работает вместе с objectManager.
Узнать область, которую захватывает objectManager можно при помощи метода getBounds.
https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/ObjectManager-docpage/#getBounds
Правда этот метод доступен с 23й версии (текущий 2.1-dev).

Переписала так:

function getBounds() {

    var maxLat = 0,

                maxLon = 0,

                minLat = 100,

                minLon = 100;

    objectManager.objects.each(function (object) {

        var lat = object.geometry.coordinates[0],

            lon = object.geometry.coordinates[1];

        maxLat = (lat

        maxLon = (lon

        minLat = (lat >= minLat) ? minLat : lat;

        minLon = (lon >= minLon) ? minLon : lon;

    }, myMap);

    if (minLat == maxLat && minLon == maxLon)

                myMap.setCenter([minLat, minLon] ,12, {

            checkZoomRange: true

        });

    else

    myMap.setBounds([[minLat, minLon], [maxLat, maxLon]]);

 

Не помогло. Насколько я понимаю, проблема возникает при выполнении myMap.setBounds(bounds); Еще раз уточню, что границы карты устанавливаются верно, а метки просто не отрисовываются.

Всеволод Шмыров
23 марта 2015, 19:41
Вы можете прислать страницу с ошибкой?

извините за задержку. Вот страничка:

 

 

 

2 метки объединяются в кластер и он сразу виден. 3 метка же сразу не видна и появляется только после масштабирования карты. Такой эффект достигается вызовом getBounds() из addPlacesToMap.

а можете непосредственно в песочнице https://tech.yandex.ru/maps/jsbox/2.1/object_manager_events
показать как настроить zoom