如何删除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来计算人的行进距离吗?
答案 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(@“你有旅行=%@”,距离);