2010-10-11 20 views
0

Je tente de calculer la distance totale parcourue et de la transmettre au View Controller, mais les résultats ne sont pas conformes aux attentes. Code est la suivante:distanceFromLocation - La distance totale n'est pas calculée correctement

MyCLController.m

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{  
    validLocation = YES; 

    if (!newLocation) 
    { 
     validLocation = NO; 
    } 

    if (newLocation.horizontalAccuracy < 0) 
    { 
     validLocation = NO; 
    } 

    // Filter out points that are out of order 
    NSTimeInterval secondsSinceLastPoint = -[newLocation.timestamp timeIntervalSinceNow]; 
    if (secondsSinceLastPoint < 0) 
    { 
     validLocation = NO; 
    } 

    if (validLocation == YES) 
    { 
     [self.delegate locationChange:newLocation :oldLocation]; 
    } 

NewWorkoutViewController.m

-(void)locationChange:(CLLocation *)newLocation:(CLLocation *)oldLocation 
{  

    CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation]; 

    currentSpeed = ([newLocation speed] * 3600)/1000; 
    totalDistance = (totalDistance + meters)/1000; 
    totalDistanceMeters = totalDistanceMeters + meters; 
    avgSpeed = totalDistance/counterInt; 

    [speedLbl1 setText:[NSString stringWithFormat:@"%.3f", currentSpeed]]; 
    [distanceLbl1 setText:[NSString stringWithFormat:@"%.3f", totalDistance]]; 

}

Le problème est avec mon cumulLa, il ne semble pas être à ajouter à chaque fois, c'est comme si je l'écrasais, quand je fais un test dans la voiture, je peux voir des valeurs de 10/20 mètres entre les coordonnées, donc cela indique que la fonction remoteFromLocation semble fonctionner.

Quelqu'un at-il des idées?

Cordialement, Stephen

Répondre

2

Essayez ceci:

totalDistance = totalDistance + (meters/1000); 

au lieu de cette

totalDistance = (totalDistance + meters)/1000; 

La façon dont vous l'aviez, cumulLa était divisé par 1000 à chaque fois à savoir si vous êtes voyageant 10m chaque fois:

totalDistance = (0+10)/1000 = 0.01; 
totalDistance = (0.01+10)/1000 = 0.01001 //!< You expected this to be 0.02! 
totalDistance = (0.01001+10)/1000 = 0.01001001 //!< You expected this to be 0.03!