У меня есть приложение, которое хранит достопримечательности (POI) в Core Data managedObjectContext
. Моя цель состоит в том, чтобы получать оповещения, если currentLocation
находится в пределах указанного диапазона POI в managedObjectContext
. Читая о CLRegion
, кажется, что количество регионов, которые можно отслеживать, ограничено 20.
Чтобы обойти ограничение на мониторинг региона, мой план игры состоит в том, чтобы просматривать мои managedObjectContext
координаты широты / долготы и вычислять расстояния между POI каждый раз, когда в моем приложении срабатывает didUpdateLocations
диспетчера местоположения:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *location = [locations lastObject];
NSLog(@"LocationManager Latitude %+.6f, Longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
// TODO: compute distances between objects in managedObjectContext
[self calculateDistances];
self.currentLocation = location;
}
// method to compute distances
- (void) calculateDistances {
// for POI in managedObjectContext, do the following
CLLocation *locA = [[CLLocation alloc] initWithLatitude:self.currentLocation.coordinate.latitude longitude:self.currentLocation.coordinate.longitude];
CLLocation *locB = [[CLLocation alloc] initWithLatitude:POIlatitude longitude:POIlongitude];
CLLocationDistance distance = [locA distanceFromLocation:locB];
if (distance < 1000) {
// popup alert
}
}
Я использовал managedObjectContext
только для отображения данных. В этом случае я ничего не показываю - вместо этого я просто бегаю по объектам в моем MOC
, когда didUpdateLocations
срабатывает, вытаскивая координаты и вычисляя расстояние. Есть идеи, как это сделать?