Como compensar o centro de um Google Maps (API v3) em pixels?

Eu queria saber se é possível compensar o centro de um mapa no Google maps api v3. Eu gostaria de controlar esse deslocamento em pixels , já que lat e lng parecem errados e muito difíceis de prever.

Eu só preciso colocar um marcador, e depois deslocar o centro por 250px para que eu possa colocar algum outro conteúdo no meio do mapa.

Espero que alguém possa ajudar!

Encontrei esta questão ao pesquisar e pensei que deveria fornecer uma resposta:

function map_recenter(latlng,offsetx,offsety) { var point1 = map.getProjection().fromLatLngToPoint( (latlng instanceof google.maps.LatLng) ? latlng : map.getCenter() ); var point2 = new google.maps.Point( ( (typeof(offsetx) == 'number' ? offsetx : 0) / Math.pow(2, map.getZoom()) ) || 0, ( (typeof(offsety) == 'number' ? offsety : 0) / Math.pow(2, map.getZoom()) ) || 0 ); map.setCenter(map.getProjection().fromPointToLatLng(new google.maps.Point( point1.x - point2.x, point1.y + point2.y ))); } 

Se sua variável do Google Maps não for um map use a seguinte referência de function de chamada:

 function map_recenter(map,latlng,offsetx,offsety) { ... 

Consulte esta pergunta: Como compensar o centro de um Google Maps (API v3) em pixels?

Esta é uma modificação de uma resposta que forneci aqui .

 google.maps.Map.prototype.setCenterWithOffset= function(latlng, offsetX, offsetY) { var map = this; var ov = new google.maps.OverlayView(); ov.onAdd = function() { var proj = this.getProjection(); var aPoint = proj.fromLatLngToContainerPixel(latlng); aPoint.x = aPoint.x+offsetX; aPoint.y = aPoint.y+offsetY; map.setCenter(proj.fromContainerPixelToLatLng(aPoint)); }; ov.draw = function() {}; ov.setMap(this); }; 

Você pode então usá-lo assim:

 var latlng = new google.maps.LatLng(-34.397, 150.644); var map = new google.maps.Map(document.getElementById("map_canvas"), { zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP, center: latlng }); map.setCenterWithOffset(latlng, 0, 250); 

Aqui está um exemplo de trabalho.

Dê uma olhada no object MapCanvasProjection – http://code.google.com/apis/maps/documentation/javascript/reference.html#MapCanvasProjection

Você pode obter o centro do mapa latLng (map.getCenter ()) e convertê-lo nas coordenadas de pixel do contêiner com fromContainerPixeltoLatLng ()

Há também o método panBy do object map … você pode compensar por um número especificado de pixels. No entanto, você terá uma animação de transição suave, que pode não ser o que você queria. Eu estou procurando a mesma coisa, vou deixar você saber o que eu encontro.