2012-12-19 15 views
5

ポリラインを使ってios6のマップ上の2つのポイントを接続する方法を学習しようとしています。まず最初に、私はこのテーマに関するすべてのチュートリアルを読んで、シンプルなGoogle検索が始まり、ある理由でポリラインが機能しないようにしました。私が見たすべてのチュートリアルでは、常にポリラインがマップに追加され、マップ全体の線に合わせて地図のズームが調整されます。一定の距離で地図をズームしたままにし、現在のビューよりも大きい場合はポリラインの終点のみを表示するには、ios6のマップにポリラインを追加してポリラインを追加する方法はありますか?どのように私はこれをやって行くだろうMapKit Polylineカスタムズーム?

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

:たとえば は、私はマイル長さだったポリラインを持っていたし、マップがconstandのdistacneのequivelentにズームインしたままにしたいと言いますか?完全なコード例や、ダウンロードできるサンプルプロジェクトを用意してください!

+0

あなたの現在地とあなたのpolylineViewを表示しているズームを保持しますか? – james075

答えて

0

MKMapPoint * malloc関数/アサイン:

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

MKPolylineは、あなたの必要に初期化する必要があります。

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

あなたMKPolylineを表示するには、あなたが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; 
} 

このメソッドを使用するには、ポイントをCLLocationに変換する必要があります.MKCoordinateRを返します。あなたが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; 
} 

希望します。