2010-08-13 11 views
37

Me preguntaba si es posible compensar el centro de un mapa en Google maps api v3. Me gustaría controlar este desplazamiento en píxeles, ya que lat y lng parecen incorrectos y muy difíciles de predecir.Cómo desplazar el centro de un Google Maps (API v3) en píxeles?

Solo necesito colocar un marcador, y luego compensar el centro por 250px para poder colocar otro contenido en el medio del mapa.

Espero que alguien pueda ayudar!

Respuesta

57

encontraron esta cuestión cuando la investigación y pensé que debería dar una respuesta:

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 
    ))); 
} 

Si la variable de los mapas de Google no es map utilizar la siguiente referencia de función de llamada:

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

Hermosa solución !!! ¡Trabajó tan limpiamente! – TruMan1

+0

Lo estoy usando en onMarkerClick(). Cuando hago clic sobre una marca, funciona perfecto, pero si disparo la marca (del código) con google.maps.event.trigger (thisMark, 'clic'); no funciona ... pero no importa (puedo vivir con eso) ... Es la mejor solución para compensar. ¡¡¡Gracias!!! – Equiman

+0

Hermosa y elegante solución. – ChrisRich

3

También existe la método panBy del objeto de mapa ... puede compensar por un número específico de píxeles. Sin embargo, obtendrá una animación de transición suave, que puede no ser la que usted quería. Estoy buscando lo mismo, te dejaré saber lo que encuentro.

+1

sí, 'map.panBy (0, -10)' para moverlo hacia arriba por 10px –

23

se refieren a este pregunta: How to offset the center of a Google maps (API v3) in pixels?

Esta es una modificación de una respuesta que proporcioné here.

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); 
}; 

Puede entonces sólo lo utilizan de esta manera:

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); 

Aquí es una example de trabajo.

+2

+1 para ampliar la clase de mapa – BenLanc

+0

hermoso, trabajado un regalo, ¡gracias! –

+0

Funciona como un encanto. ¡Gracias! – ebiv

Cuestiones relacionadas