2010-05-08 109 views
2

我跟着這個教程,使我的第一個應用程序:MapKit註釋和用戶位置

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

我真的想知道如何在表中的註釋中距離的順序對用戶進行排序(中最近的註釋是桌子上的第一個註釋)怎麼可能做到這一點?

我知道我必須使用CLLocation來查找用戶的位置,但我不知道。

任何人都可以幫助我嗎?

乾杯,

預先感謝您爲您的十分寶貴的幫助,

編輯:我添加細節:

的數據不是在一個陣列,它是在RootViewController的實現。 m在這種形式:

-(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 2010-05-08 19:14:35

+0

也許應該是,如果你想對它們進行排序。 – Nick 2010-05-08 20:08:42

+1

查看您的修改代碼,您可能希望將每個appleStore#數據項放入字典中作爲鍵/值對(名稱,說明,位置等),然後將每個Dictionary添加到數組中。根據距離對數組運行排序,然後遍歷數組,並將每個項目添加爲地圖的註釋。當需要顯示數據表時,您必須爲該表設置一個dataSource,並將該數組作爲排序數組。建議您將計算出的CLLocationDistance也存儲在數組中(作爲NSNumber),並將其顯示在表中的人類可讀值(即300英尺,3英里)中。 – Ramin 2010-05-09 01:03:08

1

通過CLLocations循環並找到它們與當前位置之間的距離。

然後使用您自己的排序算法來排序數組中的距離。

for (CLLocation *loc in locations) { 
    [distances addobject:[currentLocation distanceFromLocation:loc]]; 
} 
[distances sort]; /* Own sorting algorithm */ 
[yourTable reloadData];