2014-10-04 2 views
0

мне нужно рассчитать все параметры GPS в моей программе, поэтому я использую этот кусок кода:Как рассчитать ВСЕ GPS данные CLLocationManager одновременно

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    CLLocation* loc = [locations lastObject]; 

, который собирает все измерения GPS (высота, скорость , и т. д.) в объекте loc, и у меня есть информация lat/long (и loc.coordinate.longitude), но это НОВЫЕ измеренные координаты.

Как я также хочу рассчитать расстояние между измерениями, как я могу получить как «новые» координаты, так и «старые» координаты из метода didUpdateLocations?

Если добавить еще один locationManager вызов с помощью метода didUpdateToLocation в программе (которая даст старые и новые координаты):

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation 
    fromLocation:(CLLocation *)oldLocation { 

первоначальный метод locationManager (didUpdateLocations) не вызывается вообще, так что я не могу вычислить все данные GPS плюс расстояние ...

+0

Второй метод, который вы указали, устарел - заменен первым, но если вы реализуйте его, тогда первый метод не вызывается - как вы нашли. Вам нужно сохранить предыдущее местоположение в свойстве и сравнить/рассчитать на основе этого при следующем вызове – Paulw11

+0

Поскольку я новичок в программировании на iOS, как мне скопировать объект местоположения на другой объект (то есть в прежнее место) с видимостью за пределами CLLocationManage (поэтому я могу сравнить последние данные о местоположении в следующем вызове метода CLLocationManager)?Я получаю доступ к свойствам lat/long объекта loc, но метод CLLocationDistance, который я вызову, требует объектов в качестве аргументов, а не свойств. – DaliGR

+0

Просто создайте свойство для своего класса, в котором хранится CLLocation. – Paulw11

ответ

0

После сменив с копией собственности у меня это рабочий код, но я не могу понять смысл:

  • (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) местоположения { _locManagerIteration ++; NSLog (@ "Иерархия управления местоположением =% ld", _locManagerIteration);

    CLLocation * loc = [locations lastObject]; // в местах, где гарантируется наличие хотя бы одного объекта

    if (_locManagerIteration == 1) {// ИНИЦИАЛИЗАЦИЯ ПЕРВОГО ПРОШЛОГО КООРДИНАТНОГО ОБЪЕКТА self.pastCoordinate = [locations lastObject]; } else { CLLocationDistance _pointDistance = [self.pastCoordinate distanceFromLocation: loc]; NSLog (@ "POINT TO POINT DISTANCE =% f", _pointDistance); self.pastCoordinate = [location lastObject]; } NSLog (@ "POINT TO POINT DISTANCE =% f", _pointDistance);

    _totalDistance = _totalDistance + _pointDistance; // COMPUTE TOTAL DISTANCE _totalDistance = _totalDistance/1000; // ПЕРЕВОД ОБЩЕГО РАССТОЯНИЯ В КИЛОМЕТРАХ В приведенном выше разделе вызов CLLocationDistance правильно устанавливает расстояние в метрах в моей глобальной переменной _pointDistance. Я печатаю переменную _pointDistance и вижу номер (NSLog ...). ОДНАКО, когда я снова напечатать ту же глобальную переменную вне если-то заявление значение всегда равно нулю ...

в пределах еще скобки переменная _pointDistance имеет черный цвет в Xcode (и печатает значение) и за пределами скобки else отображается зеленым цветом, а значение обнулено .... Не может быть никакого смысла ...

Смежные вопросы