2010-01-21 12 views
24

Al hacer clic de un marcador a otro en Google Maps, la pantalla del mapa anima el movimiento sin problemas si ambos marcadores están dentro de la vista del mapa inicial, pero salta si uno de los marcadores está fuera de la pantalla.¿Cómo puedo tener un movimiento animado suave entre 2 ubicaciones de Google Maps?

Estoy tratando de configurar un mapa que tiene varias ubicaciones dentro del área del mapa principal pero tiene una que está 'fuera de pantalla'. Tengo un ícono de señalización en la ubicación más distante dentro del área del mapa inicial, que quiero desplazarme sin problemas a la ubicación fuera de la pantalla cuando hago clic (para dar una mejor idea de su ubicación relativa). No puedo encontrar nada en Maps API que me permita hacer esto sin embargo.

Pude alejar, mover y luego acercar de nuevo pero esto parece un poco discordante. ¿Me falta algo en la API, o alguien tiene alguna sugerencia?

Respuesta

29

Lamentablemente, no creo que esto sea posible (sin un cambio de Google). Desde el v3 API reference para panTo:

Cambia el centro del mapa a la clase LatLng. Si el cambio es menor que el ancho y alto del mapa, la transición se animará suavemente.

lo que implica que si ese cambio no es inferior a las dimensiones del mapa, la transición no se animará suavemente. Los otros métodos de paneo son similares.

Puede intentar avanzar en varios pasos, pero eso es un poco complicado y sospecho que el resultado será pobre.

Lo siento, no es muy útil (tengo el mismo problema).

+4

Sí, el resultado de utilizar varios pasos o escribir su propio panorama es deficiente. Lo que tiende a fallar es que o bien terminas desplazándote más rápido de lo que se pueden obtener las teselas, lo que te deja haciendo un barrido inútil sobre la grisura en blanco, o tienes que desplazar mucho más lentamente que panTo() cuando está dentro del alcance, lo que significa que toma un tiempo inaceptablemente largo cuando hay una distancia significativa para ser barrido. NOTA: las llamadas múltiples a .panTo() no hacen cola. La segunda llamada interrumpe cualquier pan que esté actualmente en progreso y el anbd lo reemplaza. –

+0

Sí, probé varios rollos y no se veía muy bien. Al final me conformé con el alejamiento y luego paneo una vez que el otro marcador estaba en la pantalla. No se ve * demasiado * malo (http://tinyurl.com/ye46vy5) y funciona mejor que un salto repentino. – pelms

+0

¿Por qué no hacer un zoom animado hasta que ambas ubicaciones sean visibles y luego pan, que será animado de forma nativa? EDITAR: De hecho, alguien lo ha sugerido en 2012: http: // stackoverflow.com/a/816132/339872 – antitoxic

1

Si está utilizando Gmaps API V2, puede implementar movimientos animados sin problemas muy fácilmente utilizando el método panBy(). Debes usar el método deLatLngToContainerPixel() para encontrar la cantidad de píxeles que quieres panoramizar.

Aquí es el bit de código:

var newLoc = map.fromLatLngToContainerPixel(new GLatLng(lat, lng)); 
map.panBy(new GSize(newLoc.x, newLoc.y)); 

Sin embargo, lo que yo estoy tratando de hacer es lograr lo mismo en V3 API de mapas, pero lamentablemente método fromLatLngToContainerPixel() ya no funciona de la manera que :(hizo

+1

Puedes usar map.getBounds(); en su lugar, y de esa llamada bounds.getSouthWest() y bounds.getNorthEast() para obtener el lat/lng de las 4 esquinas. –

9

para mí funciona este método, pero yo estoy usando Google Maps API v2.

LatLng latLng = new LatLng(lat,lng); 
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, ZOOM_FACTOR)); 

esto anima a la cámara desde la posición actual a la nueva.

+0

¡Ayudó! ¡Gracias! – DmitryKanunnikoff

Cuestiones relacionadas