Проблемы при получении расстояния между двумя точками

В моем приложении для 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 не активен. Человек предложил мне это решение. Почему мой код не дает мне дистанцию?

2 ответа

Решение

Обратный звонок

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

дает вам хотя бы одно местоположение, а массив положений содержит несколько объектов, если обновление местоположения было отложено ранее. Чтобы получить расстояние ходьбы / вождения, вы должны сохранить начальное местоположение в переменной класса или свойстве. Затем, когда вы хотите рассчитать расстояние, сделайте, как в коде выше, но с переменной класса, которая содержит начальное местоположение.

Проверьте ниже код для получения расстояния:

- (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];
    }
}
Другие вопросы по тегам