2012-02-12 3 views
4

Я создал метод, как показано ниже, чтобы преобразовать CGRect в MapRect нижеКак конвертировать CGRect в MapRect

- (MKMapRect)mapRectForRect:(CGRect)rect 
{ 
    CLLocationCoordinate2D topleft = [mapView convertPoint:CGPointMake(rect.origin.x, rect.origin.y) toCoordinateFromView:canvasView]; 
    CLLocationCoordinate2D bottomeright = [mapView convertPoint:CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect)) toCoordinateFromView:canvasView]; 
    MKMapPoint topleftpoint = MKMapPointForCoordinate(topleft); 
    MKMapPoint bottomrightpoint = MKMapPointForCoordinate(bottomeright); 

    return MKMapRectMake(topleftpoint.x, topleftpoint.y, bottomrightpoint.x - topleftpoint.x, bottomrightpoint.y - topleftpoint.y); 
} 

Я сделал небольшой тест.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"heart.png"] imageByScalingProportionallyToSize:CGSizeMake(100, 100)]]; 
    imageView.frame = CGRectMake(0, 0, 100, 100); 
    imageView.center = [mapView convertCoordinate:mapView.centerCoordinate toPointToView:canvasView]; 
    [canvasView addSubview:imageView]; 

    CGRect rect = imageView.frame; 
    for (int i = 0; i < 5; i ++) 
    { 
     NSLog(@"%f, %f, %f, %f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 
     maprect = [self mapRectForRect:rect]; 
     NSLog(@"%f, %f, %f, %f", maprect.origin.x, maprect.origin.y, maprect.size.width, maprect.size.height); 

     region = MKCoordinateRegionForMapRect(maprect); 
     rect = [mapView convertRegion:region toRectToView:canvasView]; 
    } 

Он работает очень хорошо на прошивкой 5:

110,000000, 180,000000, 100,000000, 100,000000

78118912,000000, +94811514,406252, 52428800,000000, 52428799,999997

110,000000, 180,000000, 100,000000, 100,000000

78118912.000000, 94811514.406252, 52428800.00000 0, 52428799,999997

110,000000, 180,000000, 100,000000, 100,000000

78118912,000000, 94811514,406252, +52428800,000000, 52428799,999997

110,000000, 180,000000, 100,000000, 100,000000

78118912,000000, +94811514,406252, +52428800,000000, 52428799,999997

110.000000, 180.000000, 100.000000, 100.000000

+78118912,000000, 94811514,406252, 52428800,000000, 52428799,999997

Но результат на прошивке 4.3 это немного странно.

110,000000, 180,000000, 100,000000, 100,000000

78118912,000000, 94811514,406252, 52428800,000000, 52428799,999997

110,000000, 174,263596, 100,000000, 101,746048

78118912,000000, +91803986,406252, +52428800,000000, 53344231,999997

110.000000, 166.962997, 100.000000, 104.330460

78118912,000000, 87976370,406253, +52428800,000000, 54699207,999997

110,000000, 157,400009, 100,000000, 108,272507

78118912,000000, 82962610,406253, +52428800,000000, 56765975,999997

110,000000, 144,297470, 100,000000, 114,581375

78118912,000000, +76093106,406254 , 52428800.000000, 60073639.999996

+0

https://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html '- ​​(MKMapRect) mapRectForRect: (CGRect) rect' – SAKrisT

+0

я проверил , это не то, что я хочу. Я хочу преобразовать прямоугольник в другие виды в mapview. метод на http://stackoverflow.com/questions/6775718/how-to-make-the-union-between-two-mkcoordinateregion тоже не работает. – newme

+2

У кого-то такая же проблема? – newme

ответ

0

Что-то вроде этого (код Swift), кажется, работает нормально. В этом случае mapView имеет тип GMSMapView!, поэтому mapView.frame имеет тип CGRect.

let mkMapSize = MKMapSize(width: Double(self.mapView.frame.width), height: Double(self.mapView.frame.height)) 
let mkMapPoint = MKMapPoint(x: Double(self.mapView.frame.origin.x), y: Double(self.mapView.frame.origin.y)) 
let mkMapRect = MKMapRect(origin: mkMapPoint, size: mkMapSize)