答えて

23

ので、あなたが最初MKMapRectに各MKCoordinateRegionを変換し、その関数を呼び出し(およびMKCoordinateRegionForMapRect機能を使用してバックMKCoordinateRegionに結果を変換する)可能性が2 MKMapRectsを受け入れMKMapRectUnion機能があります。 、そして、

- (MKMapRect)mapRectForCoordinateRegion:(MKCoordinateRegion)coordinateRegion 
{ 
    CLLocationCoordinate2D topLeftCoordinate = 
     CLLocationCoordinate2DMake(coordinateRegion.center.latitude 
       + (coordinateRegion.span.latitudeDelta/2.0), 
      coordinateRegion.center.longitude 
       - (coordinateRegion.span.longitudeDelta/2.0)); 

    MKMapPoint topLeftMapPoint = MKMapPointForCoordinate(topLeftCoordinate); 

    CLLocationCoordinate2D bottomRightCoordinate = 
     CLLocationCoordinate2DMake(coordinateRegion.center.latitude 
       - (coordinateRegion.span.latitudeDelta/2.0), 
      coordinateRegion.center.longitude 
       + (coordinateRegion.span.longitudeDelta/2.0)); 

    MKMapPoint bottomRightMapPoint = MKMapPointForCoordinate(bottomRightCoordinate); 

    MKMapRect mapRect = MKMapRectMake(topLeftMapPoint.x, 
          topLeftMapPoint.y, 
          fabs(bottomRightMapPoint.x-topLeftMapPoint.x), 
          fabs(bottomRightMapPoint.y-topLeftMapPoint.y)); 

    return mapRect; 
} 

を実際に労働組合を行うには:

変換方法は、次のようになります

MKCoordinateRegion region1 = ... 
MKCoordinateRegion region2 = ... 

MKMapRect mapRect1 = [self mapRectForCoordinateRegion:region1]; 
MKMapRect mapRect2 = [self mapRectForCoordinateRegion:region2]; 

MKMapRect mapRectUnion = MKMapRectUnion(mapRect1, mapRect2); 

MKCoordinateRegion regionUnion = MKCoordinateRegionForMapRect(mapRectUnion); 
+0

これはまさに私が探していたものです、ありがとう – foux

0

私は4.3と5.0の両方にほとんどのテストを行なったし、それがコンバージョンと思われます修正されていない

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

MKCoordinateRegion region = [mapView convertRect:imageView.frame toRegionFromView:canvasView]; 
MKMapRect maprect; 
for (int i = 0; i < 5; i ++) 
{ 
    maprect = [mapView mapRectForCoordinateRegion:region]; 
    NSLog(@"%f, %f, %f, %f", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta); 
    NSLog(@"%f, %f, %f, %f", maprect.origin.x, maprect.origin.y, maprect.size.width, maprect.size.height); 
    region = MKCoordinateRegionForMapRect([mapView mapRectForCoordinateRegion:region]); 
} 


14.718256、 -40.078125、63.837150、70.312500
78118912.000000、94811514.406252、52428800.000000、52428799.999997
17.416993、-40.078125、63.837150、70.312500
78118912.000000、91803983.982924、52428800.000000、53344239.567355
20.649080、-40.078125、63.837150、70.312500
78118912.000000、87976363.978412、52428800.000000、54699220.734715
24.548345、-40.078125、63.837150、70.312500
78118912.000000、 82962597.189840、52428800.000000、56765991.576236
29.305644、-40.078125、63.837150、70.312500
78118912.000000、76093086.024249、52428800.000000、60073659.997575

1

誰でも拡張子を使用して迅速同等を探している場合は、

extension MKCoordinateRegion { 
    func mapRectForCoordinateRegion() -> MKMapRect { 
     let dLat = span.latitudeDelta/2.0 
     let dLon = span.longitudeDelta/2.0 

     let topLeft = MKMapPointForCoordinate(
      CLLocationCoordinate2DMake(center.latitude + dLat, center.longitude - dLon)) 
     let botRight = MKMapPointForCoordinate(
      CLLocationCoordinate2DMake(center.latitude - dLat, center.longitude + dLon)) 

     return MKMapRectMake(
      topLeft.x, 
      topLeft.y, 
      fabs(botRight.x - topLeft.x), 
      fabs(botRight.y - topLeft.y)) 
    } 

    func unionWith(region: MKCoordinateRegion) -> MKCoordinateRegion { 
     let union = MKMapRectUnion(
      self.mapRectForCoordinateRegion(), 
      region.mapRectForCoordinateRegion()) 

     return MKCoordinateRegionForMapRect(union) 
    } 
} 

と同様に使用することができます

let region1 = ... 
let region2 = ... 

let regionUnion = region1.unionWith(region2) 
関連する問題