LocationManager区域监视器不是我所期望的。区域边界看起来比我的设置大

时间:2013-09-05 07:53:34

标签: ios cllocationmanager clregion

此区域监视器的准确性非常差。有谁能解决这个问题?我的源代码存储库位于:https://github.com/robert-yi-jones/RegionTrigger

我创建了一个CLLocationCoordinate2D变量,它是map的中心。然后,我根据坐标在半径100米处设置一个区域。

CLLocationCoordinate2D *targetPoint =
        [[CLLocation alloc] initWithLatitude:MapView.centerCoordinate.latitude
                                   longitude:MapView.centerCoordinate.longitude];
targetRegion = [[CLCircularRegion alloc] initWithCenter:targetPoint.coordinate
                                                 radius:300
                                             identifier:@"My Circle Region"];
[locationManager startMonitoringForRegion:targetRegion];

然而,看起来我启动监视器的区域效果不佳。

/*
 *  locationManager:didEnterRegion:
 *
 *  Discussion:
 *    Invoked when the user enters a monitored region.  This callback will be invoked for every allocated
 *    CLLocationManager instance with a non-nil delegate that implements this method.
 */
- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(CLRegion *)region{
    if ([region.identifier isEqualToString:@"My Circle Region"]) {
        [self showAlertWithTitle:@"Entering a Region"
                         Message:region.identifier];
    }
}

/*
 *  locationManager:didExitRegion:
 *
 *  Discussion:
 *    Invoked when the user exits a monitored region.  This callback will be invoked for every allocated
 *    CLLocationManager instance with a non-nil delegate that implements this method.
 */
- (void)locationManager:(CLLocationManager *)manager
          didExitRegion:(CLRegion *)region{
    if ([region.identifier isEqualToString:@"My Circle Region"]) {
        [self showAlertWithTitle:@"Exiting a Region"
                         Message:region.identifier];
    }
}

只有在坐标切换到距离我的设置区域6公里左右的某个地方时才注意到我。

有没有人有区域监控示例代码?我真的找不到我的错误!

1 个答案:

答案 0 :(得分:1)

我的经验是,这是正常行为。我一直在使用区域监控大约2。5年,从iOS 6开始,-didExitRegion代表需要比-didEnterRegion更长的触发时间。我还在WWDC 2013期间由Apple工程师确认了这一行为。听起来他们并不打算在退出事件中提高准确性,而是延迟。根据工程师的说法,操作系统需要花费更长的时间来破译你已经离开的因为它必须完全脱离已知的Wifi网络和新的蜂窝塔。确定你到达的比确定你离开的要容易得多。

如果它只需要300M左右来触发你的地理围栏(在300M半径范围之外),我会说你可能在地理围栏的操作范围内。如果您需要精确度比退出精度更高,那么您可能需要调用GPS芯片以及随之而来的所有工作。希望这些信息有所帮助。