views:

728

answers:

1

Hi all,

I followed this tutorial to make my first app: http://icodeblog.com/2009/12/21/introduction-to-mapkit-in-iphone-os-3-0/

I would really like to know how to sort the annotations in the Table in order of distance to the user (the nearest annotation is the first one on the table) How is it possible to do that?

I understand that I must use the CLLocation to find the user's location but then I have no idea.

Could any one help me?

Cheers,

Thank you in advance for your much appreciated help,

EDIT: I've added details:

the data is not in an array, it is implemented in RootViewController.m in this form: -(void)loadOurAnnotations

{CLLocationCoordinate2D workingCoordinate;

workingCoordinate.latitude = 40.763856; workingCoordinate.longitude = -73.973034; iCodeBlogAnnotation *appleStore1 = [[iCodeBlogAnnotation alloc]

initWithCoordinate:workingCoordinate]; [appleStore1 setTitle:@"Apple Store 5th Ave."]; [appleStore1 setSubtitle:@"Apple's Flagship Store"]; [appleStore1 setAnnotationType:iCodeBlogAnnotationTypeApple];

[mapView addAnnotation:appleStore1]; ... and so on. How is it possible to do it then? you can find the source code here: icodeblog.com/wp-content/uploads/2009/09/iCodeMap.zip

teddafan

+1  A: 

On a CLLocation you can use

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

to calculate the distance of an object from another. In this case, it would presumably be the user's current location.

If the data is in an NSArray you can use sortedArrayUsingFunction to call a helper function that calls this method.

Ramin
i added details because my data is not in an array!
teddafan
Perhaps it should be if you want to sort them.
Nick
Looking at your amended code, you may want to put each of those appleStore# data items in a Dictionary as key/value pairs (name, description, location, etc.) then add each Dictionary to an array. Run a sort on the array based on distance, then loop through the array and add each item as an annotation to the map. When it's time to show the table of data, you'll have to set a dataSource for the table and that sorted array would be it. Suggest you store the calculated CLLocationDistance in the array too (as an NSNumber) and display it in a human-readable value (i.e. 300ft, 3 miles) in the table.
Ramin
Thank you very much for those informations. However, i'm a total newbie. Could you give an example?
teddafan