Клуб API Карт

Zoom и Bounds с фиксированным центром

threezero
8 апреля 2014, 10:44

Приветствую! Подскажите, пожалуйста, можно ли определить максимально допустимый zoom, при котором bounds вместится на карте. Центр должен быть фиксирован.

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

У нас есть вот такой модуль http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/util.bounds.xml

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

Для решения вашей задачи надо сделать следующее.

1. Взять bounds

2. Сопоставить bounds с требуемым центром карты. Если центр находится не в центре прямоугольной области - ее надо расширить, чтобы нужная точка была в центре

3. Полученные в п.2 границы скормить модулю и получить зум

var bounds = [[0, 0], [10, 40]],
    p = [5, 7],
    projection = map.options.get('projection'),
    pixelCenter = projection.toGlobalPixels(p, 0),
    pixelLowerCorner = projection.toGlobalPixels(bounds[0], 0),
    pixelUpperCorner = projection.toGlobalPixels(bounds[1], 0),
    margin = [
        pixelLowerCorner[1] - pixelCenter[1],
        pixelUpperCorner[0] - pixelCenter[0],
        pixelCenter[1] - pixelUpperCorner[1],
        pixelCenter[0] - pixelLowerCorner[0]
    ],
    span = [
        2 * Math.max(margin[1], margin[3]),
        2 * Math.max(margin[0], margin[2])
    ],
   size = map.container.getSize(),
   zoom = Math.max(0, Math.floor((Math.log(Math.min(size[0]/span[0], size[1]/span[1])))/Math.log(2)));

  map.setCenter(p, zoom, { checkZoomRange: true });
Как-то так. Если нет переходов через 180 меридиан.

util.bounds.getCenterAndZoom

?

Прозвучало требование иметь фиксированный центр.