Я создал метод, как показано ниже, чтобы преобразовать 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
https://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html '- (MKMapRect) mapRectForRect: (CGRect) rect' – SAKrisT
я проверил , это не то, что я хочу. Я хочу преобразовать прямоугольник в другие виды в mapview. метод на http://stackoverflow.com/questions/6775718/how-to-make-the-union-between-two-mkcoordinateregion тоже не работает. – newme
У кого-то такая же проблема? – newme