1. ホーム
  2. ios

[解決済み] [Solved] MKMapViewをアノテーションピンに合わせてズームする?

2022-04-12 06:19:23

質問

MKMapViewを使用しており、地図上に5~10kmの範囲に多数のアノテーションピンを追加しています。アプリケーションを実行すると、地図が全世界を表示するようにズームアウトされます。ピンが表示に合うように地図をズームする最良の方法は何ですか?

EDIT 最初に考えたのは、MKCoordinateRegionMakeを使用して、私のアノテーションから座標の中心、経度δ、緯度δを計算することです。私はこれがうまくいくことを確信していますが、私はちょうど私が明白な何かを見逃していないことを確認したかったのです。

コード追加、ちなみにFGLocationは、以下の規格に準拠したクラスです。 MKAnnotation であり、locationFakeは NSMutableArray を作成しました。コメントはいつでも歓迎します.

- (MKCoordinateRegion)regionFromLocations {
    CLLocationCoordinate2D upper = [[locationFake objectAtIndex:0] coordinate];
    CLLocationCoordinate2D lower = [[locationFake objectAtIndex:0] coordinate];

    // FIND LIMITS
    for(FGLocation *eachLocation in locationFake) {
        if([eachLocation coordinate].latitude > upper.latitude) upper.latitude = [eachLocation coordinate].latitude;
        if([eachLocation coordinate].latitude < lower.latitude) lower.latitude = [eachLocation coordinate].latitude;
        if([eachLocation coordinate].longitude > upper.longitude) upper.longitude = [eachLocation coordinate].longitude;
        if([eachLocation coordinate].longitude < lower.longitude) lower.longitude = [eachLocation coordinate].longitude;
    }

    // FIND REGION
    MKCoordinateSpan locationSpan;
    locationSpan.latitudeDelta = upper.latitude - lower.latitude;
    locationSpan.longitudeDelta = upper.longitude - lower.longitude;
    CLLocationCoordinate2D locationCenter;
    locationCenter.latitude = (upper.latitude + lower.latitude) / 2;
    locationCenter.longitude = (upper.longitude + lower.longitude) / 2;

    MKCoordinateRegion region = MKCoordinateRegionMake(locationCenter, locationSpan);
    return region;
}

解決方法は?

正しく理解できている

最大・最小の緯度・経度を求め、簡単な算数を適用し MKCoordinateRegionMake .

iOS 7 以降では showAnnotations:animated: よりも MKMapView.h :

// Position the map such that the provided array of annotations are all visible to the fullest extent possible. 
- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated NS_AVAILABLE(10_9, 7_0);