如何使mapview缩放到当前位置的5英里半径

Ais*_*sha 26 iphone zoom objective-c mkmapview

我知道这是一个非常普遍的问题,但我没有得到这个问题的确切答案.

如何使MKMapView默认为当前位置5英里半径的缩放.

提前致谢.

Anu*_*rag 59

使用MKCoordinateRegionMakeWithDistanceMapKit中的函数.

由于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;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中将地图区域设置为(感谢@DylanBettermann指出要获得5英里的半径,距离需要加倍)

mapView.region = MKCoordinateRegionMakeWithDistance(
    centerCoordinate, 
    MilesToMeters(10.0f),
    MilesToMeters(10.0f)
);
Run Code Online (Sandbox Code Playgroud)

swift 4版本:

mapView.region = MKCoordinateRegion(
            center: centerCoordinate,
            latitudinalMeters: MilesToMeters(10.0f),
            longitudinalMeters: MilesToMeters(10.0f)
)
Run Code Online (Sandbox Code Playgroud)

  • 我不确定自发布以来`MKCoordinateRegionMakeWithDistance`是否已更改,但是在iOS 9中,这只会使您获得2.5英里半径。将直径传递给“ MKCooridinateRegionMakeWithDistance”,而不是半径。(例如,“ MilesToMeters(10.0f)”代表5英里半径) (2认同)

Sat*_*yam 55

如果要缩放到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];
Run Code Online (Sandbox Code Playgroud)

  • 对于任何想知道的人来说,神奇的数字69是每60海里的英里数.纬度有60海里. (31认同)