2010-05-08 4 views
2

Я после этого учебника, чтобы сделать мое первое приложение:MapKit Аннотация и местоположение пользователя

http://icodeblog.com/2009/12/21/introduction-to-mapkit-in-iphone-os-3-0/

Я действительно хотел бы знать, как сортировать аннотации в таблице в порядке расстояния до пользователя (ближайшая аннотация - первая на столе). Как это можно сделать?

Я понимаю, что я должен использовать CLLocation для поиска местоположения пользователя, но тогда я понятия не имею.

Может ли кто-нибудь мне помочь?

Приветствия,

Заранее спасибо за высокую оценку помощи,

EDIT: Я добавил детали:

данные не в массиве, он реализован в RootViewController. м в таком виде:

-(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]; 

... и так далее. Как это можно сделать?

Вы можете найти исходный код здесь:

icodeblog.com/wp-content/uploads/2009/09/iCodeMap.zip

teddafan

ответ

3

На более CLLocation вы можете использовать

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

чтобы рассчитать расстояние от объекта от другого. В этом случае он предположительно будет текущим местоположением пользователя.

Если данные указаны в NSArray, вы можете использовать sortedArrayUsingFunction для вызова вспомогательной функции, которая вызывает этот метод.

+0

Я добавил детали, потому что мои данные не в массиве! – teddafan

+0

Возможно, это должно быть, если вы хотите отсортировать их. – Nick

+1

Рассматривая ваш измененный код, вы можете поместить каждый из этих элементов данных AppleStore # в словарь как пары ключ/значение (имя, описание, местоположение и т. Д.), А затем добавить каждый словарь в массив. Запустите сортировку по массиву на основе расстояния, затем пройдите через массив и добавьте каждый элемент в виде аннотации к карте. Когда пришло время показать таблицу данных, вам нужно будет установить источник данных для таблицы, и этот отсортированный массив будет им. Предложите, чтобы вы сохранили вычисленное значение CLLocationDistance в массиве (как NSNumber) и отобразили его в удобочитаемом значении (т. Е. 300 футов, 3 мили) в таблице. – Ramin

1

Пройдите через CLLocations и найдите расстояние между ними и вашим текущим местоположением.

Затем используйте свой собственный алгоритм сортировки для сортировки расстояний, которые у вас есть в массиве.

for (CLLocation *loc in locations) { 
    [distances addobject:[currentLocation distanceFromLocation:loc]]; 
} 
[distances sort]; /* Own sorting algorithm */ 
[yourTable reloadData]; 
Смежные вопросы