В одной функции создается объект с GeoBounds().
Если по его вершинам построить полигон, то получается:
Но центр для этого объекта, функцией getCenter(), определяется не верно:
С чем это может быть связано?
...
this.setOffset = function(objBorders) {
/* objBorders = { left, right, top, bottom } */
var offset = new YMaps.Point(-Math.floor(getElement().width()/2), -Math.floor(getElement().height()+7) );
var position = map.converter.coordinatesToMapPixels(point).moveBy (offset);
// Вычисляем диагонали объекта.
var objBl = map.converter.localPixelsToCoordinates( new YMaps.Point( position.x-objBorders.left, position.y+getElement().height()+objBorders.bottom ) );
var objTr = map.converter.localPixelsToCoordinates( new YMaps.Point( position.x+getElement().width()+objBorders.right, position.y-objBorders.top ) );
var objBounds = new YMaps.GeoBounds(objBl, objTr);
var newMapBl = map.getBounds().getLeftBottom();
var newMapTr = map.getBounds().getRightTop();
// Проверяем в каких местах относительно видимой части карты, скрыт объект.
// Скрыт справа.
if(map.getBounds().getRight()/objBounds.getRight() < 1)
{
// Назначаем диагональным точкам новый X.
newMapTr.setX(objBounds.getRight());
var difRight = objBounds.getRight() - map.getBounds().getRight();
newMapBl.setX(map.getBounds().getLeft()+difRight);
}
// Скрыт слева. ВОТ ОТ СЮДА ВОЗНИКАЛА ПРОБЛЕМА
if(map.getBounds().getLeft()/objBounds.getLeft() > 1)
{
var cond = 'left'
// Назначаем диагональным точкам новый X.
newMapTr.setX(objBounds.getLeft());
var difLeft = map.getBounds().getLeft() - objBounds.getLeft();
newMapBl.setX(map.getBounds().getRight()-difLeft);
}
// Скрыт сверху.
if(map.getBounds().getTop()/objBounds.getTop() < 1)
{
// Назначаем диагональным точкам новый Y.
newMapTr.setY(objBounds.getTop());
var difTop = objBounds.getTop() - map.getBounds().getTop();
newMapBl.setY(map.getBounds().getBottom()+difTop);
}
// Скрыт снизу.
if(map.getBounds().getBottom()/objBounds.getBottom () > 1)
{
// Назначаем диагональным точкам новый Y.
newMapTr.setY(objBounds.getBottom());
var difBottom = objBounds.getBottom() - map.getBounds().getBottom();
newMapBl.setY(map.getBounds().getTop()+difBottom);
}
// РЕШЕНИЕ: если задействовано проблемное место — менять местами диагонали.
if(cond == 'left') var newMapBounds = new YMaps.GeoBounds(newMapTr, newMapBl);
else var newMapBounds = new YMaps.GeoBounds(newMapBl, newMapTr);
map.panTo(newMapBounds.getCenter(), {flying: true});
}
...