2012-03-06 16 views
10

scroll gmapsGoogle Maps: mapa de desplazamiento mediante programación de píxeles x

¿Hay una manera sencilla para desplazarse un mapa de Google mediante programación de x píxeles?

sólo puedo pensar en usar setCenter, pero el problema es que tendría que calcular la nueva ubicación (LAT/LNG) en función del nivel de zoom ...

¿Puede 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.

pd: Estoy usando Gmaps4rails, así que si se te ocurre una manera 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.

fit markers


Solución:

@Shane mejor, grande, la idea funciona perfectamente, pero creo que su solución era que Google API v2, ¿verdad? He aquí cómo lo hice por 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 sabe de una mejor solución con versión 3 del API, nos dice al respecto.

Respuesta

12

Tome una mirada en el objeto de proyección: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

Primero se necesitaría para obtener el centro del mapa.

var point = map.getCenter(); 

Convierta el latlng a un valor en puntos.

var pixelpoint = projection.fromLatLngToPoint(point); 

Añade tu valor a los valores de puntos.

pixelpoint.x = pixelpoint.x + yourvalue; 
//or 
pixelpoint.y = pixelpoint.y + yourvalue; 

Convertirlo 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.

+0

Voy a probar esto, gracias. – Robin

+0

Al mirar su imagen e intentar entender mejor su problema. Puede que estés mejor con fitbounds. http://stackoverflow.com/a/2496558/787921 –

+0

Bueno ... los límites están definidos por mis marcadores. Siempre es lo mismo para un conjunto determinado de marcadores.Lo que no puedo hacer es básicamente modificar la ventana gráfica del mapa, excluir la parte superior, donde está el menú, para que el método fitBounds del mapa pueda hacer su trabajo de la manera que yo quiera. (porque ya estoy usando fitBounds para empezar, pero algunos marcadores pueden estar ocultos por el menú). – Robin

3

creo que busca 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, se mueve el mapa sur por 90 píxeles.

Cuestiones relacionadas