Zoom to fit region for all annotations - ending up zooming in between annotations

后端 未结 2 764
盖世英雄少女心
盖世英雄少女心 2021-01-03 05:54

I have a problem with fitting all my annotations to the screen... sometimes it shows all annotations, but some other times the app is zooming in between the two annotations

相关标签:
2条回答
  • 2021-01-03 06:29

    Use the following code

    -(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(FSMapAnnotation* 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-03 06:30

    Instead of:

    region.span.latitudeDelta = meter / 111319.5;
     region.span.longitudeDelta = 0.0;
     region.center.latitude = (SouthWest.latitude + NorthEast.latitude) / 2.0;
     region.center.longitude = (SouthWest.longitude + NorthEast.longitude) / 2.0;
    

    Try adding:

    region.span.latitudeDelta = fabs(NorthEast.latitude - SouthWest.latitude) * 1.2; 
    region.span.longitudeDelta = fabs(SouthWest.longitude - NorthEast.longitude) * 1.2; 
    region.center.latitude = NorthEast.latitude - (NorthEast.latitude - SouthWest.latitude) * 0.5;
    region.center.longitude = NorthEast.longitude + (SouthWest.longitude - NorthEast.longitude) * 0.5;
    

    And removing:

    CLLocationDistance meter = [locSouthWest distanceFromLocation:locNorthEast];
    
    0 讨论(0)
提交回复
热议问题