2012-12-27 2 views
1

지도에 주석이있는 iPhone 응용 프로그램을 개발 중이며 모든 주석을 삽입했습니다. 나는 모든 주석 (X100)을 위해 사용했던 코드는 다음과 같습니다MapKit에서 가장 가까운 주석 목록

내가 어떻게 사용자의 위치에 가장 가까운 주석을 표시 목록의 모든 위치를 얻을 수있다에 대해 궁금 무엇
CLLocationCoordinate2D theCoordinate1; 
theCoordinate1.latitude = 59.92855; 
theCoordinate1.longitude = 10.80467; 

MyAnnotation* myAnnotation1=[[MyAnnotation alloc] init]; 

myAnnotation1.coordinate=theCoordinate1; 
[email protected]"Økern Senter - DNB"; 
[email protected]"Økernveien 145, 0580 OSLO"; 

[mapView addAnnotation:myAnnotation1]; 

[annotations addObject:myAnnotation1]; 

?

답변

3

사용자와 주석 간의 거리를 계산하면됩니다. 당신의 MyAnnotation에서

우선, 거리 값을 유지하는 변수를 추가 : 는 MyAnnotation.h에 다음을 추가

@property (nonatomic, assign) CLLocationDistance distance; 

및 당연히하는 .m 파일에 합성합니다.

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    [...] 
    for (MyAnnotation *annotation in self.mapView.annotations) { 
     CLLocationCoordinate2D coord = [annotation coordinate]; 
     CLLocation *anotLocation = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude]; 
     annotation.distance = [newLocation distanceFromLocation:anotLocation]; 
    } 

    NSArray *sortedArray; 
    sortedArray = [self.mapView.annotations sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSNumber *first = [NSNumber numberWithDouble:[(MyAnnotation*)a distance]]; 
     NSNumber *second = [NSNumber numberWithDouble:[(MyAnnotation*)b distance]]; 
     return [first compare:second]; 
    }]; 

    [...] 
} 

은 이제 따라 정렬되어있는 tableView 요법에 대한 소스로 sortedArray를 사용할 수 있습니다 둘째, 당신의지도보기 클래스의 새 위치를받을 때 다음 코드를 추가합니다 (하나는 주석 요법을 유지) 가장 가까운 거리에서 가장 먼 거리까지의 거리. 물론

+0

고마워요! 두 번째 코드에서 작성한 것처럼 사용자 위치를받는 가장 좋은 방법은 무엇입니까? –

+0

[core location framework] (http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CoreLocation_Framework/_index.html)를 사용하십시오. 그것을위한 대리자 메서드를 추가했습니다. 그러나 델리게이트 메서드가 매우 자주 반환 될 수 있으므로 계산 코드를 분리하는 것이 좋습니다. 아마도 사용자가 1cm마다 다시 계산하기를 원하지 않을 수도 있습니다. –

+0

@GThamanTitan 문제가 해결 되었습니까? –

관련 문제