我希望每秒跟踪用户移动情况并在Google地图上显示。为此,我使用以下代码。但是这段代码每秒都会激活多次。
首先,我想每秒停止对方法的多次调用。然后,当我在某个位置暂停5分钟时,它应该跟踪相同的纬度和经度,并插入到我的位置数组中 - 我需要,当用户不走几分钟时(相同的纬度和经度不立即输入我的位置数组。)
CODE:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//NSLog(@"didUpdateLocations");
for (CLLocation *newLocation in locations) {
//NSLog(@"in foor loop");
NSDate *eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (fabs(howRecent) < 10.0 && newLocation.horizontalAccuracy < 20) {
// update distance
if (self.locations.count > 0) {
self.distance += [newLocation distanceFromLocation:self.locations.lastObject];
CLLocationCoordinate2D coords[2];
coords[0] = ((CLLocation *)self.locations.lastObject).coordinate;
coords[1] = newLocation.coordinate;
MKCoordinateRegion region =
MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 500, 500);
// [self.delegate updateRegion:region withOverLayCoordinates:coords];
}
[self.locations addObject:newLocation];
// NSLog(@"self.locations:: %@",self.locations);
}
}
}
答案 0 :(得分:0)
我想你想要的只是在特定的时间间隔或特定的距离旅行时获得更新:
答案 1 :(得分:0)
[locationManager stopUpdatingLocation];
使用此语法停止位置管理器更新。
答案 2 :(得分:0)
问题是,您的实施是基于定时地理位置收集,但这不是Apple希望您做的事情。原因如下:
想象一下,你有三个应用程序在后台运行,收集你的位置并采取行动 - 你正在一个城市中行走,有foursquare,步跟踪器和谷歌地图导航。假设所有人都会每秒请求你的位置。这会在几分钟内耗尽电池。相反,方法是,当位置发生变化时,订阅所有应用程序以接收更新以使用它。这就是为什么你会收到如此多的更新 - 因为它在运动过程中会迅速变化。
第一个很容易修复 - 只需将时间存储在局部变量中,并忽略该给定间隔内的所有其他更新。第二个是非常棘手的。我知道这不是一个好消息,但你必须找到一种方法来结合后期处理和Apple的方法 - 例如从现在到最后一次收到更新之间的秒数重复相同的位置。因为目前没有办法问 - “嘿,每秒都给我发一次更新”。