Ce n'est pas particulièrement difficile une fois que vous trouvez pertinents de la réponse précédente.
Vous avez besoin de convertir au centre de la carte de son monde, coordonnées, de trouver l'endroit où la carte doit être centré pour mettre l' apparente centre où vous le souhaitez, et re-centrer la carte à l'aide de la véritable centre.
L'API sera toujours au centre de la carte sur le centre de la fenêtre d'affichage, de sorte que vous devez être prudent si vous utilisez map.getCenter()
qu'il sera de retour le véritable centre, pas le centre évident. Je suppose qu'il serait possible de surcharger l'API de sorte que son getCenter()
et setCenter()
méthodes sont remplacés, mais je n'ai pas fait que.
Le Code ci-dessous. Exemple en ligne. Dans l'exemple, en cliquant sur le bouton déplace le centre de la carte (il y a une jonction de route de là) en bas de 100px de gauche et de 200px.
function offsetCenter(latlng,offsetx,offsety) {
// latlng is the apparent centre-point
// offsetx is the distance you want that point to move to the right, in pixels
// offsety is the distance you want that point to move upwards, in pixels
// offset can be negative
// offsetx and offsety are both optional
var scale = Math.pow(2, map.getZoom());
var nw = new google.maps.LatLng(
map.getBounds().getNorthEast().lat(),
map.getBounds().getSouthWest().lng()
);
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);
}