Клуб API Карт

максимальное приближение

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

Как заставить карту максимально приближаться, как например в режиме народной карты, при добавлении жилого здания, карта сателит может приблизиться уже не на 18, а на 20 зум???

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

Можно использовать метод setZoom с опцией checkZoomRange: true.

 

myMap.setZoom(23, { checkZoomRange: true });
Комментарий удалён

Можно попробовать переопределить методы у объекта Layer, отвечающего за карту.

1. Идем в хранилище типов карты и достаем нужный MapType.

var yandexType = mapType.storage.get('yandex#map');

2. Получаем список ключей для слоев

var layers = yandexType.getLayers(); // там должен быть 1 ключ

3. Достаем конструктор слоя из хранилища слоев по ключу

var LayerConstructor = layer.storage.get(layers[0]);

4. Создаем свой класс слоя, отнаследованный от полученного конструктора.

Переопределяем у него методы

getTileSize(zoom) - на зумах больше 18 начинаем отдавать [512, 512], [1024, 1024] и тд

getZoomRamge(point) - нужно увеличить диапазон до требуемого

getTileUrl(tileNumber, tileZoom) - нужно подшаманить, чтобы на фиктивных зумах шли запросы за тайлами для меньшего зума, на котором тайлы реально есть.

5. Далее нужно сформировать новый MapType с полученным слоем и добавить его на карту.

переопределить можно с помощью нашего модуля util.augment (http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/util.augment.xml).

var MyLayerClass = function (params) {
    MyLayerClass.superclass.constructor.call(this, params);
};
ymaps.util.augment(MyLayerConstructor, LayerConstructor, {
    getTileSize: function (zoom) {
        // если больше 18, отдавать тайлы в размере 512✕512
        // можно и больше, если поправить
        return zoom > 18 ? [512, 512] : [256, 256];
    }
… 
});

и так далее, переопределяя методы, которые описала mari-na-bzzz.
Где именно споткнулись?

Там, честно говоря, довольно нетривиальный код. Его надо сидеть, писать, отлаживать, на что времени нет)

Может быть вам просто на 18м масштабе включать народную карту вручную?

У нас есть отдельный тип карты - гибрид. Если его нет для какого-то масштаба - это значит, что гибридного слоя с надписями для этого масштаба нет. Так что тут только народная карта подойдет.

Просто сделайте сверху еще один прозрачный слой и добавьте его точно так же на карту. Нужно задать ему правильный zIndex, чтобы он находился поверх подложки.