Клуб API Карт

setCenter vs. YMaps.YMapsML?

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

Добрый день.

Я хочу отобразить карту с помощью YMapsML. В карте прописан gml:boundedBy.

Могу ли я как-то отказаться от обязательного вызова setCenter перед этим? Так как я, в общем-то, не знаю, куда мне его делать – карта на ymapsml у меня выбирается динамически. Приходится вызывать каку-нибудь чушь вроде map.setCenter(new YMaps.GeoPoint(0,0), 20); чтобы перед отображением карты на ymapsml не мелькало какое-нибудь другое непотребство.


А не вызываю setCenter – получаю просто серое пятно вместо карты.

2 комментария
Все добавленные оверлеи кладутся добавляются на карту только после ее инициализации, для чего карте нужно указать координаты центра.
Но сам YMapsML загружается в не зависимости от состояния карты, следовательно план таков: создаем YMapsML документ, получаем из него настройки отображения и применяем их карте.

Вот код :
// создадим документ и отключим автоприменение настроек отображения
// их мы будем применять сами
var ymapsml = new YMaps.YMapsML(url, {viewAutoApply: false});
YMaps.Events.observe(ymapsml, ymapsml.Events.Load, function () {
    // определеим значения отображения
    // предусмотрим значения по умолчанию, для настрокек которых не будет в YMapsML документе
    var bounds = this.view.boundedBy || new YMaps.GeoBounds(new YMaps.GeoPoint(), new YMaps.GeoPoint()),
        mapType = this.view.mapType ? YMaps.MapType[this.view.mapType] : YMaps.MapType.MAP;
    // инициализируем карту
    map.setCenter(bounds.getCenter(), bounds.getMapZoom(map), mapType);
    // добавляем документ на карту, в принципе это можно было сделать и сразу после создания,
    // но так кажется красивее
    map.addOverlay(this);
});

 
Спасибо!!