Проблемы при получении расстояния между двумя точками
В моем приложении для 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];
}
}