Возможно, платформа CoreLocation может помочь вам в этой проблеме? Кажется, следующий метод сделан с учетом вашего вопроса:
- (id)initCircularRegionWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier
Вы можете проверить, попадает ли координата из вашей базы данных в область, используя следующий метод:
- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate
Полагаю, вышесказанное не идеально, если в вашей базе данных много мест. Но, возможно, можно отфильтровать набор местоположений для тестирования на основе некоторых минимальных и максимальных значений широты / долготы.
Редактировать: по запросу, пример (не забудьте импортировать CoreLocation framework):
- (void)startTest
{
#define COORDS_COUNT 4
#define RADIUS 10000.0f
CLLocationCoordinate2D coords[COORDS_COUNT] = {
CLLocationCoordinate2DMake(52.000004, 4.100002),
CLLocationCoordinate2DMake(53.000009, 4.000003),
CLLocationCoordinate2DMake(52.000001, 4.500008),
CLLocationCoordinate2DMake(52.000002, 3.900900),
};
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(52.0f, 4.0f); // Amsterdam
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:center radius:RADIUS identifier:@"Amsterdam"];
for (int i = 0; i < COORDS_COUNT; i++)
{
CLLocationCoordinate2D coord = coords[i];
if ([region containsCoordinate:coord])
{
NSLog(@"location %f, %f is within %.0f meters of coord %f, %f", coord.latitude, coord.longitude, RADIUS, center.latitude, center.longitude);
}
else
{
NSLog(@"location %f, %f is not within %.0f meters of coord %f, %f", coord.latitude, coord.longitude, RADIUS, center.latitude, center.longitude);
}
}
}
Редактировать 2: Я понимаю, что это не совсем тот ответ, который вы просили, но мне кажется, это то, что вам нужно. Как вы можете себе представить, ближайшие 100 метров широты / долготы вблизи любой координаты состоят из практически неограниченного количества координат в круговой области. Я предполагаю, что вы хотите найти объекты в вашей базе данных, которые находятся рядом с некоторой координатой, и приведенный выше код должен помочь вам достичь этого. Вы можете получить набор результатов из вашей базы данных и проверить, находятся ли они рядом с некоторой координатой.
Редактировать 3: Следующий код, скорее всего, именно то, что вам нужно:
CLLocation *center = [[CLLocation alloc] initWithLatitude:52.0f longitude:4.0f]; // Amsterdam
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:52.000004f longitude:4.100002f];
CLLocationDistance distance = [center distanceFromLocation:location1];
NSLog(@"%f", distance);
Редактировать 4: Что касается вашего вопроса о пользовательском объекте для представления таблицы, используйте что-то вроде этого:
@interface Location : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation Location
@synthesize name, coordinate;
@end