我有两个位置,一个是驾驶员,另一个是骑手。我有两个可用的长度。我想在驾驶员进入骑手位置的地理围栏区域时打到api。
我参加了QKGeofenceManager演示项目: 使用这个我可以提供lat n long和半径来找到地理围栏。
但问题是我是否必须每次在后台更新驱动程序位置以及应该应用什么条件,以便在驱动程序进入骑手的地理围栏区域时进行回调。如果ap在后台,它将如何处理一切。 我是否必须在appdelegate中进行任何更改
- (NSArray *)geofencesForGeofenceManager:(QKGeofenceManager *)geofenceManager
{
NSArray *fetchedObjects = [self.fetchedResultsController fetchedObjects];
NSMutableArray *geofences = [NSMutableArray arrayWithCapacity:[fetchedObjects count]];
for (NSManagedObject *object in fetchedObjects) {
NSString *identifier = [object valueForKey:@"identifier"];
CLLocationDegrees lat = [[object valueForKey:@"lat"] doubleValue];
CLLocationDegrees lon = [[object valueForKey:@"lon"] doubleValue];
CLLocationDistance radius = [[object valueForKey:@"radius"] doubleValue];
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(lat, lon);
CLCircularRegion *geofence = [[CLCircularRegion alloc] initWithCenter:center radius:radius identifier:identifier];
[geofences addObject:geofence];
}
return geofences;
}
答案 0 :(得分:0)
我找到了另一种方法来完成这项任务。 由于我没有调用Didenterlocation的委托方法,我采用了另一种方法。
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
// If it's a relatively recent event, turn off updates to save power
NSLog(@"%@ locations",locations);
float Lat = _locationManager.location.coordinate.latitude;
float Long = _locationManager.location.coordinate.longitude;
NSLog(@"Lat : %f Long : %f",Lat,Long);
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(28.58171,77.2915457);
NSLog(@"center check %@",center);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center
radius:500
identifier:@"new region"];
BOOL doesItContainMyPoint = [region containsCoordinate:CLLocationCoordinate2DMake(Lat,Long)];
NSLog(@"success %hhd", doesItContainMyPoint);
}
通过跟踪当前位置,只要当前位置坐标进入中心区域的坐标,就可以发出用户已进入该特定区域的通知。