CLLoacationManager类返回缓存的数据

时间:2010-06-22 11:40:34

标签: iphone objective-c cllocationmanager

如何删除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 个答案:

答案 0 :(得分:1)

似乎没有办法转储缓存的数据。文档建议使用CLLocation对象的timestamp属性来确定数据的最新状态,这就是我所做的。

- (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的{​​{3}}方法可以很容易地获得更新之间的距离。

答案 1 :(得分:0)

而不是将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”,yourdistance];

NSLog(@“你有旅行=%@”,距离);