2012-04-19 64 views
1

如果我在地图视图中有3个引脚,当地图加载时如何缩放到这些引脚。也就是说,当地图加载时,我需要放大视图,但视图应该适应地图中放置的所有针脚。它的工作,当地图只有一个引脚。但我无法处理多个引脚的缩放。帮助需要将地图视图缩放到引脚掉落的区域

回答

4

我写的下面的代码在应用程序中,它类似于@ElanthiraiyanS回答

-(void)zoomToFitMapAnnotations:(MKMapView*)mapView insideArray:(NSArray*)anAnnotationArray 
{ 
    // NSLog(@"%s", __FUNCTION__); 
    if([mapView.annotations count] == 0) return; 

    CLLocationCoordinate2D topLeftCoord; 
    topLeftCoord.latitude = -90; 
    topLeftCoord.longitude = 180; 

CLLocationCoordinate2D bottomRightCoord; 
bottomRightCoord.latitude = 90; 
bottomRightCoord.longitude = -180; 

for(MKPointAnnotation* annotation in anAnnotationArray) 
{ 
    topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 

    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
} 

MKCoordinateRegion region; 
region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5; 
region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5; 
region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1; // Add a little extra space on the sides 
region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1; // Add a little extra space on the sides 

region = [mapView regionThatFits:region]; 
[mapView setRegion:region animated:YES]; 

}

+0

什么是注释阵列。它的内容是什么? – 2012-04-19 09:28:00

+0

@JeanPaulScott针脚数组(MKPointAnnotation) – 2012-04-19 09:32:55

+0

很好地完成。谢谢! – CocoaEv 2012-08-23 05:04:08

0

您可以calc下所有引脚的中心

- (CLLocationCoordinate2D)centerPointFromAnnotationArray:(NSArray *)array 
{ 
    CLLocationCoordinate2D coorMax = CLLocationCoordinate2DMake(0, 0); 
    CLLocationCoordinate2D coorMin = CLLocationCoordinate2DMake(999, 999); 

    for (int i = 0 ; i < [array count] ; ++i) 
    { 
     LMPoint *a = [array objectAtIndex:i]; 

     if ( (a.coordinate.latitude != 0.0f) || (a.coordinate.longitude != 0.0f)) 
     { 
      if (a.coordinate.latitude > coorMax.latitude) 
      { 
       coorMax.latitude = a.coordinate.latitude; 
      } 
      if (a.coordinate.longitude > coorMax.longitude) 
      { 
       coorMax.longitude = a.coordinate.longitude; 
      } 
      if (a.coordinate.latitude < coorMin.latitude) 
      { 
       coorMin.latitude = a.coordinate.latitude; 
      } 
      if (a.coordinate.longitude < coorMin.longitude) 
      { 
       coorMin.longitude = a.coordinate.longitude; 
      } 
     } 
    } 

    CLLocationCoordinate2D coorCenter = CLLocationCoordinate2DMake((coorMax.latitude+coorMin.latitude)/2, (coorMax.longitude+coorMin.longitude)/2); 

    return coorCenter; 
} 

然后在点放大以适当的缩放级别

6

下面的方法做,

- (void)zoomToFitMapAnnotations:(MKMapView *)mapView { 
    if ([mapView.annotations count] == 0) return; 

    CLLocationCoordinate2D topLeftCoord; 
    topLeftCoord.latitude = -90; 
    topLeftCoord.longitude = 180; 

    CLLocationCoordinate2D bottomRightCoord; 
    bottomRightCoord.latitude = 90; 
    bottomRightCoord.longitude = -180; 

    for(MapAnnotation *annotation in mapView.annotations) { 
     topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
     topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 
     bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
     bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
    } 

    MKCoordinateRegion region; 
    region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5; 
    region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;  
    region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1; 

    // Add a little extra space on the sides 
    region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1; 

    // Add a little extra space on the sides 
    region = [mapView regionThatFits:region]; 
    [mapView setRegion:region animated:YES]; 
} 
+0

+1真的对我很有帮助。我刚刚更改了这一行,以便让更多空间精确显示'region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude)* 2.0;' – Praveenkumar 2013-03-13 14:27:55