如何将区域的地理围栏添加到监视中。

时间:2016-05-09 11:13:35

标签: ios objective-c location mapkit geofencing

- (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.52171,77.2015457);

    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);

}

问题是,这里我提供了一个静态区域,我可以检查(中心) 但要求是,这个区域将需要很长的骑手和骑手的数量可能会有所不同

我在一个字典数组中长得很长。首先,驾驶员将选择列表中的第一个骑手,那时我需要骑手1位置的区域。 我不知道如何实现这个

如果我喜欢这个

for (NsMutableDictionary * dict in goersList)
    {
        rider_id=[dict valueForKey:@"trip_id"];
        lat=[dict valueForKey:@"origin_lat"];
        longi=[dict valueForKey:@"origin_long"];

}

那么它将如何知道第一个区域将被监控,并且在该区域存在之后我将检查第二个位置

1 个答案:

答案 0 :(得分:3)

您可以动态创建区域并将其添加到监控中。

for (NSDictionary *dict in [result valueForKey:@"Geofences"])
{
    NSLog(@"%@",dict);
    CLLocationCoordinate2D locationCoordinate=CLLocationCoordinate2DMake([[dict valueForKey:@"cLatitude"]doubleValue], [[dict valueForKey:@"cLongitude"]doubleValue]);

    CLCircularRegion *circularRegion=[[CLCircularRegion alloc]initWithCenter:locationCoordinate radius:[[dict valueForKey:@"Radius"]doubleValue] identifier:[dict valueForKey:@"Name"]];

    circularRegion.notifyOnEntry=YES;
    circularRegion.notifyOnExit=YES;
    [[AppDelegate sharedDelegate].locationManager startMonitoringForRegion:circularRegion];
    NSLog(@"%@",[[[AppDelegate sharedDelegate] locationManager].monitoredRegions description]);
}

这里有几个区域被添加到监控中。您可以一次添加一个。即选择tableview。

使用以下代码删除其他人

for (CLRegion *monitored in [[AppDelegate sharedDelegate].locationManager monitoredRegions])
{
    [[AppDelegate sharedDelegate].locationManager stopMonitoringForRegion:monitored];
}