2010-10-11 100 views
0

我试图计算行驶的总距离并将其输出到视图控制器,但结果与预期不符。代码如下:distanceFromLocation - 没有正确计算总距离

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似乎正在工作。

任何任何想法?

的问候,斯蒂芬

回答

2

试试这个:

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!