1

地図上に注釈を付けたiPhoneアプリを開発していて、すべての注釈の挿入が完了しました。すべての注釈(x100)に使用したコードは次のとおりです。

CLLocationCoordinate2D theCoordinate1;
theCoordinate1.latitude = 59.92855;
theCoordinate1.longitude = 10.80467;

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

myAnnotation1.coordinate=theCoordinate1;
myAnnotation1.title=@"Økern Senter - DNB";
myAnnotation1.subtitle=@"Økernveien 145, 0580 OSLO";

[mapView addAnnotation:myAnnotation1];

[annotations addObject:myAnnotation1];

私が疑問に思っているのは、ユーザーの場所に最も近い注釈を示すリストでこれらすべての場所を取得するにはどうすればよいですか?

4

1 に答える 1

3

あなたがする必要があるのは、ユーザーと注釈の間の距離を計算することです。

まず、MyAnnotationのに、距離の値を保持する変数を追加します。以下を追加しますMyAnnotation.h

@property (nonatomic, assign) CLLocationDistance distance;

もちろん、.mファイルに合成します。次に、mapViewクラス(アノテーションなどを保持しているクラス)で、新しい場所を受け取ったときに次のコードを追加します。

- (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 ectのソースとして使用できますsortedArray。これは、最も近い距離から最も長い距離までの距離に従ってソートされます。もちろん

于 2012-12-28T00:49:51.270 に答える