2012-04-07 9 views
1

Für eine MKMapView-Overlay muss ich die BoundingMapRect für einen Kreis berechnen. Ich habe seine Mittelkoordinate und seinen Radius (in Metern) - aber keine Ahnung, wie man die entsprechende boundingMapRect bekommt. Als Workaround erstelle ich einen MKCircle mit den gleichen Daten und verwende den BoundingMapRect von diesem. Aber ... das ist zumindest nicht elegant.BoundingMapRect für einen Kreis

Also: Wie berechnet man eine BoundingMapRect für einen Kreis mit gegebenem Radius und Mittelpunkt?

Antwort

1
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(center_coord, radius, radius); 

dann die hier Antwort verwenden MKCoordinateRegion zu MKMapRect Convert MKCoordinateRegion to MKMapRect

+0

Nun, im ersten Moment dachte ich, dass dies mein Problem gelöst. Aber die Antwort in der verknüpften Antwort erfordert ein MKOverlayView - was die boundingMapRect von oben erfordert. Zirkulares Problem? – Axel

0

Craig Antwort für mich gearbeitet zu konvertieren:

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