Chandni
Chandni

Reputation: 690

mkmapview show route and annotations in a specified frame

I am using below method for showing annotations and route in mkmapview but it is showing only annotations in my mkmapview not showing complete route in map view's boundary Can any one suggest what modifications I need to do for showing everything properly.

Thanks

 - (void)zoomAnnotationsOnMapView:(MKMapView *)mapView toFrame:(CGRect)annotationsFrame animated:(BOOL)animated
{
    NSArray *annotations = mapView.annotations;
    int count = (int)[mapView.annotations count];
    if ( count == 0) { return; } //bail if no annotations

    //convert NSArray of id <MKAnnotation> into an MKCoordinateRegion that can be used to set the map size
    //can't use NSArray with MKMapPoint because MKMapPoint is not an id
    MKMapPoint points[count]; //C array of MKMapPoint struct
    for( int i=0; i<count; i++ ) //load points C array by converting coordinates to points
    {
        CLLocationCoordinate2D coordinate = [(id <MKAnnotation>)[annotations objectAtIndex:i] coordinate];
        points[i] = MKMapPointForCoordinate(coordinate);
    }
    //create MKMapRect from array of MKMapPoint
    MKMapRect mapRect = [[MKPolygon polygonWithPoints:points count:count] boundingMapRect];
    //convert MKCoordinateRegion from MKMapRect
    MKCoordinateRegion region = MKCoordinateRegionForMapRect(mapRect);

    //add padding so pins aren't scrunched on the edges
    region.span.latitudeDelta  *= ANNOTATION_REGION_PAD_FACTOR;
    region.span.longitudeDelta *= ANNOTATION_REGION_PAD_FACTOR;
    //but padding can't be bigger than the world
    if( region.span.latitudeDelta > MAX_DEGREES_ARC ) {
        region.span.latitudeDelta  = MAX_DEGREES_ARC;
    }
    if( region.span.longitudeDelta > MAX_DEGREES_ARC ){
        region.span.longitudeDelta = MAX_DEGREES_ARC;
    }

    //and don't zoom in stupid-close on small samples
    if( region.span.latitudeDelta  < MINIMUM_ZOOM_ARC ) { region.span.latitudeDelta  = MINIMUM_ZOOM_ARC; }
    if( region.span.longitudeDelta < MINIMUM_ZOOM_ARC ) { region.span.longitudeDelta = MINIMUM_ZOOM_ARC; }


    //and if there is a sample of 1 we want the max zoom-in instead of max zoom-out
    if( count == 1 )
    {
        region.span.latitudeDelta = MINIMUM_ZOOM_ARC;
        region.span.longitudeDelta = MINIMUM_ZOOM_ARC;
    }
    [mapView setRegion:region animated:animated];
    [mapView setVisibleMapRect:mapRect edgePadding:UIEdgeInsetsMake(120, 120, 150, 80) animated:YES];
   // [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}

When I applied it, It is showing this result.

Can any one suggest me how can I get complete route and pin also in map's boundary

Upvotes: 0

Views: 191

Answers (1)

Prateek Varshney
Prateek Varshney

Reputation: 1421

This should work

-(void)zoomToDisplayPolyline:(MKMapView*)mapView polyline:(MKPolyline*)polyline animated:(BOOL)animated
{
    [mapView setVisibleMapRect:[polyline boundingMapRect] edgePadding:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0) animated:animated];
}

Upvotes: 1

Related Questions