也许 CoreLocation 框架可以帮助您解决这个问题?看来以下方法是根据您的问题制定的:
- (id)initCircularRegionWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier
您可以使用以下方法测试数据库中的坐标是否落在某个区域内:
- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate
我想当您的数据库包含很多位置时,上述内容并不理想。但也许可以根据一些最小和最大纬度/经度值过滤出一组要测试的位置。
Edit:根据要求,一个示例(不要忘记导入核心位置框架):
- (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);
}
}
}
Edit 2:我意识到这并不完全是您要求的答案,但在我看来这就是您所需要的。您可以想象,任何坐标附近最近的 100 米纬度/经度都由圆形区域中几乎无限数量的坐标组成。我的猜测是您想要在数据库中查找靠近某个坐标的对象,上面的代码应该可以帮助您实现这一目标。您可以从数据库中检索一组结果并测试它们是否位于某个坐标附近。
Edit 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);
Edit 4:关于您关于表视图的自定义对象的问题,请使用如下内容:
@interface Location : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation Location
@synthesize name, coordinate;
@end