2014-11-23 7 views
7

Ho un marcatore nella mia mappa di Google Maps che assomiglia a questo:marcatore Ruota in base a direzione di marcia

pic

Quando l'utente è alla guida, voglio ruotare in base alla sua direzione di marcia. Come posso raggiungere questo obiettivo? Probabilmente dovrei usare la posizione precedente e le coordinate di posizione correnti per il calcolo, ma non ho idea di come.

+0

Ovviamente sai come trovare la posizione. Prima del primo ciclo, impostare la pos precedente come corrente. Quindi il tuo loop calcola continuamente la distanza tra la posizione precedente e quella attuale e quando è abbastanza grande da importare, la direzione con qualcosa come 'atan2 (dy, dx)' a quel punto si imposta l'orientamento del marker, quindi ricorda 'previous = = current' e fai un altro ciclo. –

+0

Perché non usi il 'bearing' dell'oggetto' Location'? Puoi impostarlo su 'CameraPosition'. – rom4ek

risposta

25

Se si utilizza il GPS per localizzare l'utente, l'oggetto LocationonLocationChanged contiene bearing.

Se avete solo due coordinate (ad esempio, si hanno solo coordinate dal fornitore di percorso di rete), è possibile utilizzare Location.bearingTo() per calcolare il cuscinetto di due coordinate:

Location prevLoc = ... ; 
Location newLoc = ... ; 
float bearing = prevLoc.bearingTo(newLoc) ; 

Se si dispone di un cuscinetto, è possibile impostare la rotazione del marcatore con MarkerOptions.rotation():

mMap.addMarker(new MarkerOptions() 
        .position(markerLatLng) 
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.map_marker)) 
        .anchor(0.5f, 0.5f) 
        .rotation(bearing) 
        .flat(true)); 

è necessario impostare la anchor al punto che si desidera ruotare intorno, ed è anche il punto che si desidera essere nella posizione impostata al marcatore. (0.5, 0.5) è il centro dell'immagine.

+0

Grazie, @hunyadym, funziona bene – GrafOrlov

+0

Sulla base di questa risposta come fa a sapere la parte anteriore e quella laterale della macchina? –

+0

Non sa, presume che la macchina avanzi (usa due posizioni sequenziali, la direzione del movimento punta a quest'ultima). – hunyadym