5

ポリラインを使用して ios6 のマップ上の 2 点を接続する方法を学習しようとしています。まず、このテーマに関するすべてのチュートリアルを読みましたが、単純な Google 検索が表示され、1 つの理由でポリラインが機能しないことがわかりました。私が見たすべてのチュートリアルでは、常にポリラインがマップに追加され、マップのズームが線全体に合うように調整されます。マップを一定の距離でズームインしたままにし、現在のビューよりも大きい場合にポリラインの端のみを表示する場合、ios6 でポリラインを作成してマップに追加するにはどうすればよいですか? たとえば、長さ 1 マイルのポリラインがあり、次の値に相当する定数距離でマップを拡大したままにしたいとします。

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

どうすればこれを行うことができますか?完全なコード例またはダウンロードできるサンプル プロジェクトを提供してください。

4

1 に答える 1

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 に変換する必要があります。これにより、 mapView に設定する MKCoordinateRegion が返されます。

- (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;
}

お役に立てれば。

于 2012-12-28T12:24:06.207 に答える