15

を作成する必要があるときMKCoordinateRegionは、次のようにします。

var region = MKCoordinateRegion
               .FromDistance(coordinate, RegionSizeInMeters, RegionSizeInMeters);

非常にシンプル - 完全に機能します。

ここで、現在のリージョンspanの値を保存したいと思います。region.Span値を見ると、次のMKCoordinateSpan2 つのプロパティがあります。

public double LatitudeDelta;
public double LongitudeDelta;

LatitudeDelta値をプリーズに変換するにはどうすればよいlatitudinalMetersですか? (そのため、上記の方法を使用して (後で) リージョンを再作成できます...

4

3 に答える 3

37

ご覧のとおり、マップの地域は既にあります。緯度と経度のデルタだけでなく、地域の中心点も含まれています。図に示すように、メートル単位で距離を計算できます。

ここに画像の説明を入力

1: 地域の範囲を取得します (地域の広さを緯度/経度で表します)

MKCoordinateSpan span = region.span;

2: 地域の中心を取得する (緯度/経度座標)

CLLocationCoordinate2D center = region.center;

3: 中心位置に基づいて 2 つの位置 (loc1 と loc2、北と南) を作成し、その間の距離 (メートル単位) を計算します。

//get latitude in meters
CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:(center.latitude - span.latitudeDelta * 0.5) longitude:center.longitude];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:(center.latitude + span.latitudeDelta * 0.5) longitude:center.longitude];
int metersLatitude = [loc1 distanceFromLocation:loc2];

4: 中心位置に基づいて 2 つの位置 (loc3 と loc4、西 - 東) を作成し、その間の距離 (メートル単位) を計算します。

//get longitude in meters
CLLocation *loc3 = [[CLLocation alloc] initWithLatitude:center.latitude longitude:(center.longitude - span.longitudeDelta * 0.5)];
CLLocation *loc4 = [[CLLocation alloc] initWithLatitude:center.latitude longitude:(center.longitude + span.longitudeDelta * 0.5)];
int metersLongitude = [loc3 distanceFromLocation:loc4];
于 2014-01-22T06:10:41.817 に答える