Я все продолжнаю переделывать карты с гугла на яндекс.
Столкнулся с такой задачей:
при зуме контролом при открытом баллуне на гугле баллун прибивается к точке на странице и зум считается от координат открытого баллуна. то есть даже если баллун открыт на краю контейнера карты, при увеличении он там же и останется, а не убежит за обрез контейнера. на яндексе же при увеличении контролом зум считается от центра карты при любом раскладе.
как бы побороть сей недуг?)
add('actiontick', function(e) {
var tick = e.get('tick');
if (self.balloon && self.balloon.isOpen() && tick.zoom != map.getZoom()) {
var coords = self.balloon.getPosition(),
globalPixel = map.options.get('projection').toGlobalPixels(coords, map.getZoom()),
mapCenter = map.getGlobalPixelCenter(),
// коэфициент масштабирования в глобальных кординатах
k = Math.pow(2, tick.zoom) / Math.pow(2, map.getZoom()),
// смещение баллуна на зуме карты
offsetBase = [(globalPixel[0] - mapCenter[0]), (globalPixel[1] - mapCenter[1])],
// смещение баллуна на зуме тика
offset = [offsetBase[0] * k, offsetBase[1] * k],
// глобальные пиксельные координаты баллуна на тике
tickPixel = map.options.get('projection').toGlobalPixels(coords, tick.zoom);
// глобальные пиксельные координаты центра на тике
tick.globalPixelCenter = [tickPixel[0] - offset[0], tickPixel[1] - offset[1]];
}
}).
но, похоже, управлять тиком из события не получится.
кстати, вот тут очень бы пригодилась возможность получения координат у открытого баллуна. иначе приходится костылять тем, что сохранять каждый раз переменную баллуна в свойствах контроллера.
другой вариант - написать самостоятельно кастомный контрол зума (что не хочется совсем) или перехватывать события дефолтного контрола.
как быть?
посмотреть можно тут http://www.pomnivoinu.ru/map/index.php открываем баллун любой метки и зумим контролом.