2012-12-19 18 views
5

Sto cercando di imparare come utilizzare una polilinea per connettere due punti su una mappa in ios6. Prima di tutto, ho letto tutti i tutorial su questo argomento che una semplice ricerca su Google si presenta e non può far funzionare le polilinee per un motivo. Ogni esercitazione che ho visto aggiunge sempre la polilinea alla mappa e regola lo zoom della mappa per adattarla all'intera linea. Come faccio a creare e aggiungere una polilinea a una mappa in iOS6 se voglio che la mappa rimanga ingrandita a una distanza costante e mostri solo la fine della polilinea se è più grande della vista corrente? Per esempio dire che ho avuto una polilinea che era un miglio di lunghezza e ha voluto la mappa per rimanere zoom ad un Constand distacne equivelent a:Zoom personalizzato polilinea MapKit?

MKCoordinateRegion userRegion = MKCoordinateRegionMakeWithDistance(self.currentLocation.coordinate, 1000, 1000); 
    [self.mainMap setRegion:[self.mainMap regionThatFits:userRegion] animated:YES]; 

Come potrei fare per fare questo? Si prega di fornire esempi di codice completi o un progetto di esempio che potrei scaricare!

+0

Quello che vuoi è mantenere uno zoom che mostra la tua posizione corrente e la polilineaView? – james075

risposta

0

MKMapPoint * malloc/assegnazione:

MKMapPoint *newPoints = malloc((sizeof (MKMapPoint) * nbPoints)); 
newPoints[index] = varMKMapPoint; 
free(newPoints); 

MKPolyline deve essere inizializzare nel vostro necessario:

MKPolyline *polyline = [MKPolyline polylineWithPoints:newPoints count:nbPoints]; 
[self.mapView addOverlay:polyline]; 

per visualizzare la vostra MKPolyline, è necessario utilizzare viewForOverlay:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    MKOverlayView* overlayView = [[MKOverlayView alloc] initWithOverlay:overlay];   
    if([overlay isKindOfClass:[MKPolyline class]]) { 
     MKPolylineView *backgroundView = [[MKPolylineView alloc] initWithPolyline:overlay]; 
     backgroundView.fillColor = [UIColor blackColor]; 
     backgroundView.strokeColor = backgroundView.fillColor; 
     backgroundView.lineWidth = 10; 
     backgroundView.lineCap = kCGLineCapSquare; 
     overlayView = backgroundView; 
    } 
    return overlayView; 
} 

Per utilizzare questo metodo, devi convertire i tuoi punti in CLLocation, restituirà un MKCoordinateR egion che imposterete per mapView:

- (MKCoordinateRegion)getCenterRegionFromPoints:(NSArray *)points 
{ 
    CLLocationCoordinate2D topLeftCoordinate; 
    topLeftCoordinate.latitude = -90; 
    topLeftCoordinate.longitude = 180; 
    CLLocationCoordinate2D bottomRightCoordinate; 
    bottomRightCoordinate.latitude = 90; 
    bottomRightCoordinate.longitude = -180; 
    for (CLLocation *location in points) { 
     topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, location.coordinate.longitude); 
     topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, location.coordinate.latitude); 
     bottomRightCoordinate.longitude = fmax(bottomRightCoordinate.longitude, location.coordinate.longitude); 
     bottomRightCoordinate.latitude = fmin(bottomRightCoordinate.latitude, location.coordinate.latitude); 
    } 
    MKCoordinateRegion region; 
    region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 0.5; 
    region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 0.5; 
    region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 1.2; //2 
    region.span.longitudeDelta = fabs(bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 1.2; //2 
// NSLog(@"zoom lvl : %f, %f", region.span.latitudeDelta, region.span.latitudeDelta); 
    return region; 
} 

Spero che questo aiuti.