计算圈数的最佳技术?

时间:2014-01-02 14:22:51

标签: ios location core-location

我正在制作一款应用程序,需要计算在轨道上行走的参与者的圈数。我认为我可以在起点周围创建一个小的地理围栏,并让操作系统在用户输入时告诉我,但这似乎并不像我希望的那样好。当步行者进入围栏或在轨道周围的其他区域触发时,似乎没有可靠地触发它。 (我正在测试而不让设备此时进入睡眠状态。)

在我的测试中似乎没有正确调用locationManager:didExitRegion方法。

当用户点击开始按钮时,将调用以下方法:

-(void)startLocationManager {
    if ([CLLocationManager locationServicesEnabled] && usingLocationManager) {
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        self.locationManager.delegate = self;
        self.locationManager.distanceFilter = kCLLocationAccuracyBest;
        self.locationManager.activityType = CLActivityTypeFitness;
        [self.locationManager startUpdatingLocation];
    }
}


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {      
    CLLocation *lastLocation = [locations lastObject];
    if (lastLocation.horizontalAccuracy > 10) {
        return;
    }

    // setup a geocode fence and count as user enters fence
    self.startRegion = [[CLCircularRegion alloc] initWithCenter:lastLocation.coordinate radius:10 identifier:@"startPosition"];
    [self.locationManager stopUpdatingLocation];
    [self.locationManager startMonitoringForRegion:self.startRegion];
}


-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    lapCount++;
    [self updateLapDisplay];
}

我做错了什么或者我不能以这种方式使用CoreLocation吗?

1 个答案:

答案 0 :(得分:0)

地理围栏对此无效。您无法依靠它准确或可靠地触发。以正常方式使用位置管理器及其代理,并在用户到达10或20米范围内时手动触发,然后在距离它50或100米时重置触发器。