distanceFromLocation - Общее расстояние не рассчитывается правильно - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь рассчитать общее пройденное расстояние и вывести его на View Controller, но результаты не такие, как ожидалось. Код выглядит следующим образом:

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]];

}

Проблема с моим totalDistance, он, кажется, не добавляет его каждый раз, как будто он перезаписывает его, когда я тестирую в машине, я вижу значения 10/20 метров между координатами, так что это указывает на то, что distanceFromLocation работает.

У кого-нибудь есть мысли?

С уважением, Стивен

1 Ответ

2 голосов
/ 11 октября 2010

Попробуйте это:

totalDistance = totalDistance + (meters / 1000);

вместо этого

totalDistance = (totalDistance + meters) / 1000;

Как у вас, totalDistance делится на 1000 каждый раз, т.е. если вы путешествуете 10 м каждый раз:

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!
...