Це не особливо складно, як тільки ви знайдете відповідну попередню відповідь .
Вам потрібно перетворити центр карти на її світові координати, знайти, де карту потрібно відцентрувати, щоб помітити видимий центр там, де ви цього хочете, і перецентрувати карту за допомогою реального центру.
API завжди буде центрувати карту в центрі області перегляду, тому вам слід бути обережним, якщо ви використовуєте, map.getCenter()
оскільки це поверне справжній центр, а не видимий центр. Думаю, можна було б перевантажити API, щоб його getCenter()
та setCenter()
методи замінити, але я цього не робив.
Код нижче. Приклад в Інтернеті . У прикладі, натискання кнопки зміщує центр карти (там є розв'язка дороги) вниз на 100 пікселів і наліво на 200 пікселів.
function offsetCenter(latlng, offsetx, offsety) {
var scale = Math.pow(2, map.getZoom());
var worldCoordinateCenter = map.getProjection().fromLatLngToPoint(latlng);
var pixelOffset = new google.maps.Point((offsetx/scale) || 0,(offsety/scale) ||0);
var worldCoordinateNewCenter = new google.maps.Point(
worldCoordinateCenter.x - pixelOffset.x,
worldCoordinateCenter.y + pixelOffset.y
);
var newCenter = map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);
map.setCenter(newCenter);
}