Клуб API Карт

Как для нового Layer задать максимальный зум

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

Сабж. 

 

Я добавил опен стрит мап.

 

var layerOSM = function() {
return new ym.Layer("http://otile%d.mqcdn.com/tiles/1.0.0/osm/%z/%x/%y.png", {
projection: ym.projection.sphericalMercator
});
};
var osMap = new ym.MapType("OSMap", [layerOSM]);
ym.mapType.storage.add("openstreet#map", osMap);

 

как задать максимальный зум для этого слоя? 

 

При этом чтобы автоматом выставлять на максимальный зум если на просшлом слое человек был на зуме больше максимального для OSM

5 комментариев

var layerOSM = function() {
    var resultLayer = new ym.Layer("http://otile%d.mqcdn.com/tiles/1.0.0/osm/%z/%x/%y.png", {
        projection: ym.projection.sphericalMercator
    });

     resultLayer.getZoomRange = function (point) {

        var promise = new ym.util.Promise();

        promise.resolve([4, 5]); // сюда подставляются границы зума

        return promise;

    }

    return resultLayer;
};

По поводу автоматического выставления зума - можно слушать событие карты typechange и в нем выполнять проверку на соответствие границам зумов. Чтобы не заморачиваться, можно по событию typechange выполнять выставление текущего зума с проверкой на попадание в допустимые границы.

map.events.add('typechange', function () {

    // При смене типа карты просим карту выставить себе текущий зум и проверить,

    // попадает ли он в допустимый диапазон значений.

    map.setZoom(map.getZoom(), { checkZoomRange: true });

});

Круто! 

Только не понятно как делать если работаешь с гибридом, т.е. добавляешь так

var GoogleHybrid = new ym.MapType("GoogleHybrid", [layerGoogleSatellite,layerGoogleFromHybrid]);

ym.mapType.storage.add("google#hybrid", GoogleHybrid);

 

Так получаются ошибки.

 

И еще вопрос, как подстраивать под размер при инициализации. У меня карта выбрана гибридная. Что создается кодом выше

Нужно посмотреть на код layerGoogleSatellite,layerGoogleFromHybrid, чтобы понять, в чем ошибка.

Размер чего нужно подстраивать при инициализации?

Все, я сделал. Спасибо огромное за помощь! 

 

Еще вот такой вопрос, я знаю что на некоторых участках уровень зума может менятся, т.е. на одной територии максималка 15, а на другой 13. Я не понимаю откуда берется эта информация. И как это регулируется на яндексе?

При изменении центра карты на сервер шлется запрос за этими данными.