我知道这是一个非常常见的问题,但我没有得到确切的答案。
如何使MKMapView默认缩放到当前位置5英里半径范围内。
提前感谢。
我知道这是一个非常常见的问题,但我没有得到确切的答案。
如何使MKMapView默认缩放到当前位置5英里半径范围内。
提前感谢。
使用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;
}
然后在您的代码中将地图区域设置为(感谢@DylanBettermann指出,要获得5英里的半径,距离需要加倍)
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)
)
每当您想缩放到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];
[self.theMapView setRegion:MKCoordinateRegionMake(
[theConsumer.latLong.clLocation coordinate],
MKCoordinateSpanMake( MAP_SPAN, MAP_SPAN ))
animated:YES];
MKCoordinateSpanMake
的参数以度为单位,每度在赤道上大约相当于69英里。因此,MAP_SPAN将是5.0/69.0。
MKCoordinateRegionMakeWithDistance
是否有所改变,但在iOS 9中,它只能让你获得2.5英里的半径。相反,将直径传递给MKCooridinateRegionMakeWithDistance
(例如,对于5英里半径,使用MilesToMeters(10.0f)
)。 - Dylan Bettermann