2010-01-21 3 views
24

Wenn Sie in Google Maps von einem Marker zum anderen klicken, animiert der Kartenbildschirm den Übergang reibungslos, wenn beide Marker innerhalb der ursprünglichen Kartenansicht liegen, springt jedoch, wenn einer der Marker außerhalb des Bildschirms ist.Wie kann ich zwischen zwei Google Maps-Standorten einen reibungslosen animierten Wechsel vornehmen?

Ich versuche eine Karte zu erstellen, die mehrere Orte innerhalb des Hauptkartenbereichs hat, aber einen, der 'außerhalb des Bildschirms' ist. Ich habe ein Wegweiser-Symbol zu dem entfernteren Ort innerhalb des ursprünglichen Kartenbereichs, in den ich beim Anklicken leicht zum Off-Screen-Ort scrollen möchte (um so einen besseren Eindruck von dessen relativen Lage zu bekommen). Ich kann in der Google Maps-API nichts finden, was mich jedoch dazu veranlassen würde.

Ich könnte verkleinern, bewegen und dann wieder hineinzoomen, aber das sieht ein bisschen erschütternd aus. Fehle ich etwas in der API oder hat jemand irgendwelche Vorschläge?

Antwort

29

Leider glaube ich nicht, dass dies möglich ist (ohne eine Änderung von Google). Vom v3 API reference für panTo:

Ändert die Mitte der Karte auf den angegebenen LatLng. Wenn die Änderung kleiner als die Breite und Höhe der Karte ist, wird der Übergang reibungslos animiert.

was bedeutet, dass, wenn diese Änderung nicht kleiner als die Dimensionen der Karte ist, der Übergang nicht reibungslos animiert wird. Die anderen Pan-Methoden sind ähnlich.

Sie könnten versuchen, in mehreren Schritten zu bewegen, aber das ist ein bisschen ein Hack und ich vermute, das Ergebnis wird schlecht sein.

Entschuldigung, das ist nicht sehr hilfreich (Ich habe das gleiche Problem).

+4

Ja, das Ergebnis der Verwendung mehrerer Schritte oder Schreiben Ihrer eigenen Pfanne ist schlecht. Was dazu tendiert schief zu laufen ist entweder, dass du am Ende schneller schwingst als die Kacheln, was dazu führt, dass du sinnlos über leeres Grau schwenkt, oder du musst viel langsamer schwenken als panTo(), wenn du in Reichweite bist, was bedeutet nimmt eine unannehmbar lange Zeit in Anspruch, wenn eine große Entfernung zu verschieben ist. HINWEIS: mehrere Aufrufe von .panTo() werden nicht in die Warteschlange gestellt. Der zweite Aufruf unterbricht alle laufenden Pfannen und ersetzt sie. –

+0

Ja, versuchte mehrere Scrolls und sah nicht so gut aus. Am Ende entschied ich mich für das Herauszoomen und dann für das Schwenken, sobald der andere Marker auf dem Bildschirm war. Sieht nicht * zu * schlecht aus (http://tinyurl.com/ye46vy5) und funktioniert besser als ein plötzlicher Sprung. – pelms

+0

Warum nicht einen animierten Zoom machen, bis beide Orte sichtbar sind und dann pan, die nativ animiert werden? EDIT: In der Tat hat jemand es im Jahr 2012 vorgeschlagen: http: // stackoverflow.com/a/816132/339872 – antitoxic

1

Wenn Sie Gmaps API V2 verwenden, können Sie einen reibungslosen animierten Umzug sehr einfach implementieren, indem Sie die Methode panBy() verwenden. Sie müssen die fromLatLngToContainerPixel() -Methode verwenden, um die Anzahl der Pixel zu ermitteln, nach denen geschwenkt werden soll. Hier

ist das Stück Code:

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

aber was ich versuche, das gleiche in Google Maps API V3, zu tun ist, zu erreichen, aber leider fromLatLngToContainerPixel() Methode funktioniert nicht mehr so, wie es tat :(

+1

Sie können map.getBounds(); Stattdessen, und von diesem Anruf bounds.getSouthWest() und bounds.getNorthEast(), um die lat/lng der 4 Ecken zu bekommen. –

9

Für mich ist diese Methode funktioniert, aber ich bin mit API v2 Google maps.

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

Dadurch wird die Kamera von der aktuellen Position auf die neue beseelt.

+0

geholfen! Vielen Dank! – DmitryKanunnikoff

Verwandte Themen