0

在我的 iOS 应用程序中,我必须跟踪从起点到当前位置的距离。我实现了这段代码:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    CLLocation *currentLocation = [locations lastObject];
    CLLocation *startLocation = [locations firstObject];
    [coordArray addObject:currentLocation];
    float speed = currentLocation.speed * 3.6;
    if (speed > 0) {
        self.labelSpeed.text = [NSString stringWithFormat:@"%.2f Km/h", speed];
        [speedArray addObject:[NSNumber numberWithFloat:speed]];
    }
    CLLocationDistance distance = [startLocation distanceFromLocation:currentLocation];
}

但是当我尝试使用该应用程序时,它并没有拉开距离。我需要将距离显示在标签中,并且我将使用以下等式计算步数:

steps = distance / length of human step

我知道它不准确,但我不能使用加速度计,因为它在 iPhone 的显示未激活时不起作用。一个人向我建议了这个解决方案。为什么我的代码没有给我距离?

4

2 回答 2

2

回调

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

确实为您提供了至少一个位置,如果位置更新之前被推迟,则位置数组仅包含多个对象。要获得步行/驾驶距离,您必须将初始位置存储在类变量或属性中。然后,当您想计算距离时,请按照上面的代码执行,但使用保存初始位置的类变量。

于 2014-03-03T10:13:48.050 回答
0

检查以下代码以获取距离:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {


    if ([coordArray count]>0) {

        CLLocation *currentLocation = manager.location;
        CLLocation *startLocation = [coordArray objectAtIndex:0];
        [coordArray addObject:currentLocation];
        float speed = currentLocation.speed * 3.6;
        if (speed > 0) {
            NSLog(@"\n speed:%@",[NSString stringWithFormat:@"%.2f Km/h", speed]);
        }

        CLLocationDistance distance = [startLocation distanceFromLocation:currentLocation];

        if (distance>0) {
            NSLog(@"Distance:%@",[NSString stringWithFormat:@"%lf meters",distance]);
        }

    }
    else{
        [coordArray addObject:manager.location];
    }
}
于 2014-03-03T10:27:47.330 回答