对于 MKMapView 覆盖,我需要计算一个圆的 boundingMapRect。我有它的中心坐标和半径(以米为单位) - 但不知道如何获得相应的 boundingMapRect。作为解决方法,我创建了一个具有相同数据的 MKCircle 并从中使用 boundingMapRect。但是……至少,这并不优雅。
那么:如何为具有给定半径和中心的圆计算 boundingMapRect?
对于 MKMapView 覆盖,我需要计算一个圆的 boundingMapRect。我有它的中心坐标和半径(以米为单位) - 但不知道如何获得相应的 boundingMapRect。作为解决方法,我创建了一个具有相同数据的 MKCircle 并从中使用 boundingMapRect。但是……至少,这并不优雅。
那么:如何为具有给定半径和中心的圆计算 boundingMapRect?
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(center_coord, radius, radius);
然后使用此处的答案将 MKCoordinateRegion 转换为 MKMapRect 将 MKCoordinateRegion 转换为 MKMapRect
克雷格的回答对我有用:
- (MKMapRect)boundingMapRect
{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.coordinate, self.radius, self.radius);
MKMapRect boundingRect = MKMapRectForCoordinateRegion(region);
return boundingRect;
}
MKMapRect MKMapRectForCoordinateRegion(MKCoordinateRegion region)
{
MKMapPoint a = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
region.center.latitude + region.span.latitudeDelta / 2,
region.center.longitude - region.span.longitudeDelta / 2));
MKMapPoint b = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
region.center.latitude - region.span.latitudeDelta / 2,
region.center.longitude + region.span.longitudeDelta / 2));
return MKMapRectMake(MIN(a.x,b.x), MIN(a.y,b.y), ABS(a.x-b.x), ABS(a.y-b.y));
}