Отслеживайте расстояние, пройденное пользователем, с помощью CLLocationManager или GoogleMap-IOS.

Я использую GoogleMap-IOS-1.8.1 SDK для отображения карты. Мне нужно рассчитать расстояние, пройденное пользователем. После поиска я попытаюсь использовать метод CLLocationManager -

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

double new_travelled_distance = [newLocation distanceFromLocation:oldLocation];
total_distanceTravelled_by_user += new_travelled_distance;  }

и инициализация вот так-

-(void)viewDidLoad{

[super viewDidLoad];

if(!locationManager)
{
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager setDelegate:self];
    [locationManager setDistanceFilter:5.0f];         // measured in meters
    [locationManager setHeadingFilter:kCLHeadingFilterNone];            // measured in degrees
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation];
}
[locationManager startUpdatingLocation];   }

Но это не обеспечивает точности данных, даже если я сижу на том же месте, не проехал ни одного метра, но это дает мне регулярное обновление для изменения местоположения. Должен ли я исправить свойство " CLLocationManager's DistanceFilter " или что я могу сделать для более точного расчета пройденного расстояния...?


person Gaurav Pandey    schedule 04.08.2014    source источник
comment
Диспетчер местоположения будет обновляться каждый раз, даже если вы сидите без дела, но разница будет заключаться в данных старого и нового местоположения, если вы переедете, иначе оба будут одинаковыми, поэтому ваш расчет в функции делегата менеджера местоположения должен проверять, если старое местоположение! = новое местоположение.   -  person iphonic    schedule 04.08.2014
comment
хорошо, я также могу проверить метод didUpdateToLocation, если разница в расстоянии больше, чем DistanceFilter, только я добавлю. Но этот метод вызывается только в том случае, если разница расстояний не меньше, чем DistanceFilter. Но моей главной проблемой является его флуктуация, которая во много раз больше, чем DistanceFilter (= 5 метров).   -  person Gaurav Pandey    schedule 04.08.2014
comment
это решено? у меня тоже вот такая проблема!   -  person dip    schedule 22.01.2016


Ответы (1)


Это потому, что вы устанавливаете желаемую точность как kCLLocationAccuracyBestForNavigation. Просто удалите эту строку. Также значение заголовка по умолчанию равно 1, что достаточно точно. Не устанавливайте его на kCLHeadingFilterNone.

Это предотвратит периодические обновления, и вы получите их только тогда, когда отойдете на 5 метров.

person Apurv    schedule 04.08.2014
comment
Пока не помогает, мне нужна максимально возможная точность и меньше конфликтов со свойством DistanceFilter, поэтому я использую kCLLocationAccuracyBestForNavigation. При удалении kCLLocationAccuracyBestForNavigation или использовании kCLLocationAccuracyBest я получаю больше колебаний от моего расстояния, не делая ни одного шага. - person Gaurav Pandey; 05.08.2014