How to find the nearest 100 meters latitude and longitude depending upon the current location in objective c, Iphone

蹲街弑〆低调 提交于 2019-12-03 03:53:16

Perhaps the CoreLocation framework can help you with this issue? It seems the following method is made with your question in mind:

- (id)initCircularRegionWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier

You could test if a coordinate from your database falls within a region by using the following method:

- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate

I guess the above ain't ideal when your database contains a lot of locations. But perhaps one can filter out a set of locations to test based on some minimum and maximum latitude / longitude values.


Edit: as requested, an example (don't forget to import the 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);        
        }
    }

}

Edit 2: I realize it's not exactly the answer you requested, but it seems to me this is what you need. As you can imagine the nearest 100 meters latitude / longitude near any coordinate consists of an virtually unlimited amount of coordinates in a circular region. My guess is you want to find objects within your database that are nearby some coordinate and the above code should help you achieve this. You can retrieve a set of results from your database and test if they are nearby some coordinate.


Edit 3: The following code is likely exactly what you need:

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: with regards to your question about the custom object for your table view, use something like this:

@interface Location : NSObject 
@property (nonatomic, strong) NSString               *name;
@property (nonatomic, assign) CLLocationCoordinate2D  coordinate;
@end


@implementation Location
@synthesize name, coordinate;
@end

check out this link, which has some of the services related to geo locations. may help u..

http://www.geonames.org/export/ws-overview.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!