2009-09-08 13 views
8

Sto sviluppando l'applicazione GPS. Sai come rilevare la velocità del dispositivo mobile?CLLocation speed

In realtà, ho bisogno di rilevare la velocità ogni 2 secondi.

Conosco didUpdateToLocation il metodo viene chiamato quando la posizione è cambiata.

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 

Ma penso che questo metodo non è adatto per il mio problema.

Quindi, Devo controllare la velocità di [CLLocationManager location] in 2 secondi?

Qualche suggerimento?

Grazie in anticipo.

risposta

26

Come circa il codice qui sotto, che funziona dal metodo delegato. In alternativa, se si desidera eseguire il polling, mantenere la posizione precedente e controllare la distanza modificata dall'ultimo sondaggio e utilizzare il metodo manuale (mostrato di seguito) per calcolare la velocità.

La velocità viene calcolata/fornita in m/s in modo da moltiplicare per 3,6 per kmph o 2,23693629 per mph.

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    //simply get the speed provided by the phone from newLocation 
    double gpsSpeed = newLocation.speed; 

    // alternative manual method 
    if(oldLocation != nil) 
    { 
     CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation]; 
     NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp]; 
     double calculatedSpeed = distanceChange/sinceLastUpdate; 

    } 
} 
+5

Fuori interesse che è la migliore delle due opzioni (in termini di precisione)? –

+1

getDistanceFrom è stato ammortizzato. Replace CLLocationDistance distanceChange = [newLocation getDistanceFrom: oldLocation]; con CLLocationDistance distanceChange = [newLocation distanceFromLocation: oldLocation]; – Wes

0

È possibile utilizzare solo il metodo delegato suggerito nella domanda.

Anche se si accede alla [posizione di CLLocationManager] ogni 2 secondi, si riceveranno solo le coordinate ricevute per l'ultima volta nel metodo delegato sopra.

Perché la necessità di eseguire il polling ogni due secondi? L'iphone può aggiornare le sue coordinate in meno tempo in alcuni casi.

HTH