Zoom mapview to a region where pins are dropped

后端 未结 3 1517
隐瞒了意图╮
隐瞒了意图╮ 2021-01-16 11:58

If I have 3 pins in a mapview, how will I zoom to these pins, when the map loads. That is, when the map loads I need to have a zoomed view, but the view should accomodate al

相关标签:
3条回答
  • 2021-01-16 12:05

    you may calc the center of all pins

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

    then zoom at the point with a proper zoomlevel

    0 讨论(0)
  • 2021-01-16 12:11

    The below method will do that,

    - (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 讨论(0)
  • 2021-01-16 12:22

    I wrote the below code in an App and it is similar to @ElanthiraiyanS Answer

    -(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 讨论(0)
提交回复
热议问题