startMonitoringFromRegion - что делать в didEnterRegion? - PullRequest
0 голосов
/ 22 августа 2011

В настоящее время я реализую startMonitoringFromRegion:

-  (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{   
    self.currentLocation = newLocation;


    if (![CLLocationManager regionMonitoringAvailable] ||
        ![CLLocationManager regionMonitoringEnabled])
        return;

    CLLocationDegrees radius = 5;
    if (radius > self.locationManager.maximumRegionMonitoringDistance)
        radius = self.locationManager.maximumRegionMonitoringDistance;


    CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:self.currentLocation.coordinate
                                                               radius:radius 
                                                           identifier:@"Indentifier"];

    [self.locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyHundredMeters];
    [region release];

}

Когда я вхожу в новый регион, будет вызван didEnterRegion.Мой вопрос здесь, что я должен делать в didEnterRegion?

У меня есть массив всех моих координат.Должен ли я извлечь region.center и сравнить эту координату с моим массивом координат, и посмотреть, какая из координат ближе всего к region.center?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я заметил, что в CLRegion есть замечательный метод с названием containsCoordinate.

Таким образом, вместо того, чтобы перебирать все координаты массива моего McDonald's в didEnterRegion и проверять, находится ли их расстояние меньше, чем x километров от region.center, я теперь могу просто использовать containsCoordinate.

for (Restaurant *restaurant in arrRestaurants)
{
    CLLocation *restaurantLocation = [[CLLocation alloc] initWithLatitude:[resturant.latitude doubleValue] longitude:[restraurant.longitude doubleValue]];

    if ([region containsCoordinate: restaurantLocation.coordinate])
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"McDonads found in the region!" message:[NSString stringWithFormat:@"%@", restaurant.town] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];         
    }
}

Сейчас я еще не пробовал, но мне кажется, что это логично.

0 голосов
/ 22 августа 2011

Вам необходимо реализовать методы -didEnterRegion и -didExitRegion для вашего CLLocationManager. Вы выполняете свой код в зависимости от того, что вам нужно для входа / выхода из региона.

Я отредактировал свой ответ на основе вашего комментария. Если вам нужно рассчитать расстояние между вами и вашей точкой, вы можете сделать это следующим образом.

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

Вы можете создать точку местоположения из region.center.

...