Класс CLLoacationManager, возвращающий кэшированные данные - PullRequest
0 голосов
/ 22 июня 2010

Как удалить кэшированные данные, отправленные CLLocationManager, и повысить их точность. Каждый раз, когда я запускаю приложение, оно дает мне кэшированные данные и обновляет их через некоторое время. Я видел несколько потоков, но не смог получить конкретный золь. Кто-нибудь может дать мне код? Я использую следующий метод для получения данных о местоположении ....

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

Я установил делегата и точность здесь .....

- (void)viewDidLoad {
[super viewDidLoad];
bestEffortAtLocation = nil;
latLocationArray = [[NSMutableArray alloc]init]; 
longLocationArray = [[NSMutableArray alloc]init];
locationManager =[[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.distanceFilter =  kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];

}

Также я могу использовать CLLocationManager для вычисления расстояния, пройденного человеком?

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Кажется, что нет способа сбросить кэшированные данные. Документы рекомендуют использовать свойство timestamp объекта CLLocation, чтобы определить, насколько последние данные, что я и делаю.

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
    //wait until we get a recent location, no more than 2 minutes old
    if([newLocation.timestamp timeIntervalSinceNow] <= (60 * 2)){
        DLog(@"New location:\n\tLat: %f\n\tLon: %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude)
        //turn off location updates
        [self.locManager stopUpdatingLocation];
        DLog(@"Stopping Location Updates");
        //Do stuff
    }
}

В моем тестировании мне не пришлось ждать больше секунды или двух, прежде чем я получу новые данные.

По второму пункту у вас может быть переменная, которую вы добавляете при каждом обновлении местоположения. Расстояние между обновлениями может быть довольно легко получить, используя метод CLLocation * distanceFromLocation:.

0 голосов
/ 22 июня 2010

Вместо установки distanceFilter в kCLDistanceFilterNone

т.е. locationManager.distanceFilter = kCLDistanceFilterNone;

Вы можете присвоить некоторому значению distanceFilter и проверить

Например, locationManager.distanceFilter = 0.5f;

А чтобы рассчитать расстояние, вы должны реализовать didUpdateToLocation: fromLocation:

где вы должны найти новую широту и долготу

Наконец CLLocationObject = newLocation;

CLLocationDistance yourdistance = [newLocation getDistanceFrom: CLLocationObject];

NSString * distance = [[NSString alloc] initWithFormat: @ "% gm", ваше расстояние];

NSLog (@ "у вас есть путешествие =% @", расстояние);

...