2013-05-07 98 views
5

我有一個半徑和位置。如何覆蓋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(...)似乎要在地圖點測量寬度和高度。我如何將半徑轉換爲?

最終,我呈現這樣的:

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

半徑似乎並不等於米到底在地圖上,也似乎距離並沒有被正確地測量。如何做到這一點?

我會很感激每一個提示。

回答

14

您應該改用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<MKOverlay>)overlay 

{ 
    MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:(MKCircle *)overlay] autorelease]; 
    circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.9]; 
    return circleView; 
} 
+0

謝謝,正是我在找的:) – kadrian 2013-05-08 09:05:29

+0

沒問題。樂於幫助! – 2013-05-08 18:12:03

+0

謝謝。它的工作很好。 – Raja 2017-04-28 14:20:41

6

對於iOS7:

同tdevoy在viewDidLoad中:

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; 
}