web-dev-qa-db-ja.com

現在地の半径5マイルまでマップビューをズームする方法

私はそれが非常に一般的な問題であることを知っていますが、これについて正確な答えが得られません。

MKMapViewをデフォルトで現在位置から半径5マイルのズームにする方法。

前もって感謝します。

27
Aisha

半径5マイルまでズームする場合は、次のコードを使用します。

double miles = 5.0;
double scalingFactor = ABS( (cos(2 * M_PI * newLocation.coordinate.latitude / 360.0) ));

MKCoordinateSpan span; 

span.latitudeDelta = miles/69.0;
span.longitudeDelta = miles/(scalingFactor * 69.0); 

MKCoordinateRegion region;
region.span = span;
region.center = newLocation.coordinate;

[mapView setRegion:region animated:YES];
55
Satyam

MapKitの MKCoordinateRegionMakeWithDistance 関数を使用します。

MapKitはメートルを使用するため、変換関数を使用してマイルをメートルに変換します。

float MilesToMeters(float miles) {
    // 1 mile is 1609.344 meters
    // source: http://www.google.com/search?q=1+mile+in+meters
    return 1609.344f * miles;
}

次に、コードでマップ領域を次のように設定します(半径5マイルを取得するには距離を2倍にする必要があることを指摘してくれた@DylanBettermannに感謝)

mapView.region = MKCoordinateRegionMakeWithDistance(
    centerCoordinate, 
    MilesToMeters(10.0f),
    MilesToMeters(10.0f)
);

Swift 4バージョン:

mapView.region = MKCoordinateRegion(
            center: centerCoordinate,
            latitudinalMeters: MilesToMeters(10.0f),
            longitudinalMeters: MilesToMeters(10.0f)
)
59
Anurag
[self.theMapView setRegion:MKCoordinateRegionMake(
                    [theConsumer.latLong.clLocation coordinate], 
                    MKCoordinateSpanMake( MAP_SPAN, MAP_SPAN ))
                 animated:YES];

MKCoordinateSpanMakeのパラメーターは度単位で、1度は赤道で約69マイルです。したがって、MAP_SPANは5.0/69.0になります。

2
Rayfleck