2013-03-26 11 views
6

Voglio tracciare la mia traccia utilizzando il GPS su un dispositivo Android.Come visualizzare una traccia mobile sul dispositivo Android

Non ho alcun problema a visualizzare un percorso completato ma trovo difficile mostrare la traccia mentre mi sto spostando.

Finora, ho trovato 2 modi diversi per farlo, ma nessuno dei due è particolarmente soddisfacente.

METODO 1

PolylineOptions track = new PolylineOptions(); 
Polyline poly; 

while (moving) { 
    Latlng coord = new LatLng(lat,lng); // from LocationListener 
    track.add(coord); 
    if (poly != null) { 
     poly.remove(); 
    } 
    poly = map.addPolyline(track); 
} 

cioè costruire la polilinea di rimuoverla prima di aggiungere le nuove coordinate e poi aggiungerlo indietro.

Questo è tremendamente lento.

METODO 2

oldcoord = new LatLng(lat,lng);; 

while (moving) { 
    PolylineOptions track = new PolylineOptions(); 
    LatLng coord = new (LatLng(lat,lng); 
    track.add(oldcoord); 
    track.add(coord); 
    map.addPolyline(track); 

    oldcoord = coord; 
} 

cioè tracciare una serie di singole polilinee.

Mentre questo rende molto più veloce del Metodo 1, sembra piuttosto frastagliato, in particolare a livelli di zoom inferiori perché ogni polilinea è squadrata e sono solo gli angoli che effettivamente toccano.

C'è un modo migliore e, in caso affermativo, di cosa si tratta?

risposta

8

C'è una soluzione semplice che utilizza l'API di Mappe 2.0. Otterrete una bella linea percorso liscio utilizzando tre fasi:

  1. creare una lista di punti LatLng quali:

    List<LatLng> routePoints; 
    
  2. Aggiungere i punti del percorso per l'elenco (potrebbe/dovrebbe essere fatto in un ciclo):

    routePoints.add(mapPoint); 
    
  3. Creare un Polilinea e lo alimentano l'elenco dei punti LatLng in quanto tale:

    Polyline route = map.addPolyline(new PolylineOptions() 
        .width(_strokeWidth) 
        .color(_pathColor) 
        .geodesic(true) 
        .zIndex(z)); 
    route.setPoints(routePoints); 
    

Provalo!

+0

Grazie per la risposta. Alla fine mi sono inventato questo (il mio metodo 1). Il problema che stavo avendo era che quando eseguivo un'iterazione attraverso una lista di coordinate Array che costruiva e rimuoveva la polilinea, l'elaborazione richiedeva per sempre. Tuttavia, quando ho scaricato l'elaborazione su onChangeListener, ha funzionato come un incantesimo. –

+0

@PeteH Può piacere di farmelo sapere, che cos'è mapPoint nel metodo routePoints.add (mapPoint); – Keshav1234

+0

un mapPoint è semplicemente un singolo oggetto LatLng, ovvero uno dei punti desiderati per la visualizzazione della mappa – PeteH

Problemi correlati