2012-12-19 27 views
5

Próbuję nauczyć się, jak używać polilinii do łączenia dwóch punktów na mapie w ios6. Po pierwsze, przeczytałem każdy tutorial na ten temat, że pojawia się proste wyszukiwanie w Google i nie można uzyskać polilinii z jednego powodu. Każdy samouczek, który widziałem, zawsze dodaje polilinię do mapy i dostosowuje powiększenie mapy tak, aby pasowało do całej linii. W jaki sposób chciałbym wykonać i dodać polilinię do mapy w ios6, jeśli chcę, aby mapa była powiększona w stałej odległości i pokazywać tylko koniec polilinii, jeśli jest większy od bieżącego widoku? Na przykład powiedzieć miałem łamaną, który był mile długo i chciał mapę, aby pozostawać w zbliżeniu na constand distacne equivelent do:Niestandardowy zoom MapKit Polyline?

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

Jak bym za to zabrać? Podaj pełne przykłady kodu lub przykładowy projekt, który mógłbym pobrać!

+0

Co chcesz, aby zachować zoom, który pokazuje aktualną lokalizację i polylineView? – james075

Odpowiedz

0

MKMapPoint * malloc/assign:

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

MKPolyline należy zainicjować w swojej potrzebne:

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

aby wyświetlić MKPolyline, trzeba użyć 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; 
} 

Aby użyć tej metody, musisz przekonwertować punkty na CLLocation, zwróci ona MKCoordinateR egion, który ustawisz na 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; 
} 

Mam nadzieję, że to pomoże.