google-maps - multiple - google.maps.marker label
Google Maps: desplaza el mapa programáticamente de x pixeles (2)
¿Existe una manera simple de desplazar un mapa de google programáticamente de x
píxeles?
Solo puedo pensar en usar setCenter
, pero el problema es que tendría que calcular la nueva ubicación (lat / lng) dependiendo del nivel de zoom ...
¿Puedes pensar en otra cosa? Decirme que no es posible con Google Map API es una respuesta válida si estás bastante seguro de ello.
ps: estoy usando Gmaps4rails, así que si puedes pensar en una forma de hacer eso con la gema, sería genial. (como ajustar los límites a un subconjunto del mapa.) Porque al final mi objetivo es evitar que el menú oculte algunos marcadores. Tendría que cambiar la ventana gráfica del mapa, si tiene sentido, de modo que ajuste los marcadores en el área naranja, no en el mapa completo.
Solución:
@Shane Best, genial, la idea funciona a la perfección, pero creo que tu solución fue para Google API v2, ¿no? Así es como lo hice para V3:
var point = map.getCenter();
var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);
var projection = overlay.getProjection();
var pixelpoint = projection.fromLatLngToDivPixel(point);
pixelpoint.x += my_value; # or .y
point = projection.fromDivPixelToLatLng(pixelpoint);
map.setCenter(point);
Si alguien conoce una solución mejor con API v3, cuéntenos al respecto.
Eche un vistazo al objeto de proyección: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection
Primero necesitarías obtener el centro del mapa.
var point = map.getCenter();
Convierta el latlng en un valor de punto.
var pixelpoint = projection.fromLatLngToPoint(point);
Agregue su valor a los valores de puntos.
pixelpoint.x = pixelpoint.x + yourvalue;
//or
pixelpoint.y = pixelpoint.y + yourvalue;
Convierta nuevamente a latLng.
var newpoint = projection.fromPointToLatLng(pixelpoint);
Establezca el nuevo centro con el nuevo valor.
map.setCenter(newpoint);
No he probado lo anterior, pero debería funcionar.
Creo que estás buscando esto:
var panListener = google.maps.event.addListenerOnce(map, ''bounds_changed'', function(event) {
map.panBy(0,-90);
});
setTimeout(function() {
google.maps.event.removeListener(panListener)
}, 2000);
En este caso, mueve el mapa hacia el sur 90px.