如何在iOS地图上叠加圆圈

我有一个半径和一个位置。

这就是我试图获得圆的边界矩形的方法。

- (MKMapRect)boundingMapRect{ CLLocationCoordinate2D tmp; MKCoordinateSpan radiusSpan = MKCoordinateRegionMakeWithDistance(self.coordinate, 0, self.radius).span; tmp.latitude = self.coordinate.latitude - radiusSpan.longitudeDelta; tmp.longitude = self.coordinate.longitude - radiusSpanSpan.longitudeDelta; MKMapPoint upperLeft = MKMapPointForCoordinate(tmp); MKMapRect bounds = MKMapRectMake(upperLeft.x, upperLeft.y, self.radius * 2, self.radius * 2); return bounds; } 

MKMapRectMake(...)似乎想要在Map点测量宽度和高度。 如何将半径转换为?

最后我将它呈现如下:

 MKMapRect theMapRect = [self.overlay boundingMapRect]; CGRect theRect = [self rectForMapRect:theMapRect]; CGContextAddEllipseInRect(ctx, theRect); CGContextFillPath(ctx); 

半径在地图上似乎最终不等于米,并且似乎也没有正确测量距离。 怎么做对了?

我会非常感谢每一个提示。

您应该使用MKCircle。 做类似的事情:

 CLLocationDistance fenceDistance = 300; CLLocationCoordinate2D circleMiddlePoint = CLLocationCoordinate2DMake(yourLocation.latitude, yourLocation.longitude); MKCircle *circle = [MKCircle circleWithCenterCoordinate:circleMiddlePoint radius:fenceDistance]; [yourMapView addOverlay: circle]; 

并采用下面的MKMapViewDelegate方法,并执行以下操作:

 - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay { MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:(MKCircle *)overlay] autorelease]; circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.9]; return circleView; } 

对于iOS7:

与viewDidLoad中的tdevoy相同:

 CLLocationDistance fenceDistance = 300; CLLocationCoordinate2D circleMiddlePoint = CLLocationCoordinate2DMake(yourLocation.latitude, yourLocation.longitude); MKCircle *circle = [MKCircle circleWithCenterCoordinate:circleMiddlePoint radius:fenceDistance]; [yourMapView addOverlay: circle]; 

但委托方法(因为mapView:viewForOverlay:不推荐使用):

 - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay { MKCircleRenderer *circleR = [[MKCircleRenderer alloc] initWithCircle:(MKCircle *)overlay]; circleR.fillColor = [UIColor greenColor]; return circleR; }