Клуб API Карт

Модуль "регионы" граница области

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

Есть такой код

 

                YMaps.load("regions", function () {
                   YMaps.Regions.load("ru", function (state, response) {
                        if (state == YMaps.State.SUCCESS) {
                            map.setBounds(response.getBounds());
                            map.addOverlay(response);
                        } else {
                            alert("Во время выполнения запроса произошла ошибка: " + response.error.message)
                        }
                    });
                });

Как мне отцентрировать и отмаштабировать карту по RegionCollection (России в данном случае)?

 

response.getBounds() возвращает null

4 комментария
Как вариант так:

YMaps.Regions.load("ru", function (state, response) {
    if (state == YMaps.State.SUCCESS) {
        var geoBounds = new YMaps.GeoCollectionBounds();
        response.forEach(function (obj) {
            for (var i = 0, geometry = obj.getGeometry(); i < geometry.length; i++) {
                geoBounds.add(geometry[i].coords);
            }
        });
        map.setBounds(geoBounds);
    } else {
        alert("Во время выполнения запроса произошла ошибка: " + response.error.message)
    }
});

Но лучше найти bounds стран один раз и сохранить юго-западный и северо-восточный углы.

Таким образом необходимость загружать регионы для определения bounds страны отпадает.

Дим, расскажи о своей задаче. Я постараюсь подсказать оптимальное решение.
Задача очевидна - выставить карте bounds по RegionCollection
и при этом, самому не итерируясь по всем элементам =)

Ведь RegionCollection наследует метод getBounds
вот пусть он и итерируется ну или что хочет делает,
но не возвращает null - это выглядит как баг.

Возможно хороший вариант, если
если ручка в которую ходит YMaps.Regions.load
возвращала бы в объект лоадера поле, ну например,_boundedBy,
из которого RegionCollection.getBounds его бы возвращал, примерно так:

YMaps.Regions.Loader.onLoad("RUregions", {
    _boundedBy = new YMaps.Bounds(new YMaps.Point(left, bottom), new YMaps.Point(right, top)),
...
    name: "RU",
    regions: [...],
...
});

left, bottom, right, top посчитать на сервере
У метки тоже есть метод getBounds(), который возвращает null. Тебе это не смущает?

Метод getBounds() будет возвращать тот bounds, который выставлен с помощью setBounds().

Я передам твои предложения разработчику модуля "Регионы".
Таким образом необходимость загружать регионы для определения bounds страны отпадает.

Нет конешно, я не загружаю модуль "Регионы" только для того,
чтобы спозиционироваться на страну =)

Я смотрел пример к модулю "регионы"
там позиционирование карты в стиле "прибито гвоздями" =)


// Установка для карты ее центра и масштаба            
map.setCenter(new YMaps.GeoPoint(30.532685,50.40241), 7);


Зачем мне хранить у себя центр и зум для всех регионов или
обходить все элементы коллекции, аггегируя их в GeoCollectionBounds
Я хочу ПРОСТО выставить карте bounds пришедшей RegionCollection