如何为苹果地图实现地理围栏代码 ios 9
How to implement geofencing code for apple map ios 9
我有两个位置,一个是 driver,另一个是 rider.I 有经纬度可供 both.I 使用 api driver进入骑手位置的地理围栏区域。
我浏览了 QKGeofenceManager 演示项目:
使用这个我可以提供经纬度和半径来找到地理围栏。
但问题是我是否必须每次在后台更新 driver 位置以及应应用什么条件以便在 driver 进入 [= 的地理围栏区域时进行回调18=]f 应用程序在后台它将如何处理所有事情。
我是否必须在 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;
}
我找到了完成此任务的替代方法。
由于我的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);
}
通过跟踪当前位置,每当当前位置坐标进入中心区域的坐标时,您可以触发用户已进入该特定区域的通知。
我有两个位置,一个是 driver,另一个是 rider.I 有经纬度可供 both.I 使用 api driver进入骑手位置的地理围栏区域。
我浏览了 QKGeofenceManager 演示项目: 使用这个我可以提供经纬度和半径来找到地理围栏。
但问题是我是否必须每次在后台更新 driver 位置以及应应用什么条件以便在 driver 进入 [= 的地理围栏区域时进行回调18=]f 应用程序在后台它将如何处理所有事情。 我是否必须在 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;
}
我找到了完成此任务的替代方法。 由于我的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);
}
通过跟踪当前位置,每当当前位置坐标进入中心区域的坐标时,您可以触发用户已进入该特定区域的通知。