Клуб API Карт

куда делся GeoObjectCollectionBounds в 2.0?

doctorinfo.ru
11 мая 2012, 15:51

В 1.x был очень удобный класс GeoObjectCollectionBounds, в который можно было добавлять много гео-точек и затем использовать его для оптимального подбора центра и зуминга карты. Мало того что теперь указание центра и зуминга обязательно при инициализации ymaps 2.0, так еще и этот класс найти не могу.

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

Удобным его нельзя назвать. Ведь чтобы расчитать bounds приходилось перекладывать объекты из GeoObjectCollection в GeoObjectCollectionBounds

во 2-м апи его нет, т.к. геометрия стала просто javascript-массивом, и ее можно обработать просто как js-массив.

Я написал обертку над GeoObjectCollection для АПИ 2.0

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

Спасибо. Наверное, скоро перейду на эту обертку пока сделал вручную:

function updatePlacemarks(tableOfValues) {
    map = window.map;

    var options = {
        iconImageHref: 'http://api-maps.yandex.ru/i/0.4/icons/hospital.png',
        iconImageSize: [27, 26],
        iconImageOffset: [-14, -23]
    };

    for (var i=0; i < tableOfValues.length; i++) {
/*
        var bAlreadyDefined = false;
        gCollection.each(function(context) {
            if(context.getGeoPoint().getX() == tableOfValues[i][0] &&
                context.getGeoPoint().getY() == tableOfValues[i][1])
                {
                    bAlreadyDefined = true;
                    return;
            }
        });
        if(bAlreadyDefined)
            continue;
*/

        if(typeof minLat == "undefined")
        {
            minLat = tableOfValues[i][0];
            maxLat = tableOfValues[i][0];
            minLng = tableOfValues[i][1];
            maxLng = tableOfValues[i][1];
        }
        else
        {
            if(tableOfValues[i][0] < minLat)
                minLat = tableOfValues[i][0];
            if(tableOfValues[i][0] > maxLat)
                maxLat = tableOfValues[i][0];
            if(tableOfValues[i][1] < minLng)
                minLng = tableOfValues[i][1];
            if(tableOfValues[i][1] > maxLng)
                maxLng = tableOfValues[i][1];
        }

        var placemark = new ymaps.Placemark([tableOfValues[i][1], tableOfValues[i][0]], {
            balloonContent: ''+tableOfValues[i][3]+'

Адрес:
'+tableOfValues[i][4]+'

Телефон:
'+tableOfValues[i][5]+'

'
            },
            options);
        gCollection.add(placemark);
    }
    centerAndZoom = ymaps.util.bounds.getCenterAndZoom([[minLng, minLat], [maxLng, maxLat]], [$mapContainer.width(), $mapContainer.height()]);
    map.setCenter(centerAndZoom.center);
    map.setZoom(centerAndZoom.zoom);
//    map.geoObjects.removeAll();
    map.geoObjects.add(gCollection);
}


removeAll() нет и Longtitude с Latitude местами поменял - я считаю просто глупость разработчиков. http://clubs.ya.ru/mapsapi/replies.xml?item_no=23563