1

マップビューにMKPolygon(三角形)を描画しようとしていますが、表示されません。私も線を引いて表示されているので、なぜ三角形が表示されないのかわかりません。関連するコードは次のとおりです。

           CGPoint base = [mapView convertCoordinate:carLocation toPointToView:mapView];
            CGPoint pivot = [mapView convertCoordinate:locationToLookup toPointToView:mapView];
            MKPolygon *triangle = [self drawTriangle:pivot:base];
            [mapView removeOverlays:[mapView overlays]];
            [mapView addOverlay:line];
            [mapView addOverlay:triangle];


-(MKPolygon *) drawTriangle:(CGPoint) pivot:(CGPoint)base {
    if ((abs(pivot.x - base.x) >= 70) || abs(pivot.y - base.y) >= 70 )  {
        double triangleHeight = 30;
        double triangleWidth = 30;
        double triangleSide = sqrt(triangleWidth*triangleWidth/4+triangleHeight*triangleHeight);
        double openingAngle = asin( triangleWidth/2.0/triangleSide );
        double angle = atan2( pivot.y - base.y, pivot.x - base.x );

        CGPoint a;
        a.x = (int) (base.x + triangleSide*cos( angle + openingAngle));
        a.y = (int) (base.y + triangleSide*sin( angle + openingAngle));
        CGPoint b;
        b.x = (int) (base.x + triangleSide*cos( angle - openingAngle ));
        b.y = (int) (base.y + triangleSide*sin( angle - openingAngle ));

        MKMapPoint * mp = malloc(sizeof(MKMapPoint) * 3);
        MKMapPoint init;

        init.x = base.x;
        init.y = base.y;
        mp[0] = init;
        init.x = a.x;
        init.y = a.y;
        mp[1] = init;
        init.x = b.x;
        init.y = b.y;
        mp[2] = init;
        NSLog(@"base x: %f y: %f    a x: %f y: %f     b x: %f y :%f", base.x, base.y, a.x, a.y, b.x, b.y);
        MKPolygon* triangle = [MKPolygon polygonWithPoints:mp count:3];
        NSLog(@"inside");
        free(mp);
        return triangle;
    }
    NSLog(@"here");
    return nil;

}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id )overlay
{
    MKOverlayView* overlayView = nil;

    if (overlay == line) {
        NSLog(@"In line");
    MKPolylineView* mkov =  [[MKPolylineView alloc] initWithPolyline:overlay];
   // [mkov fillColor:[UIColor redColor]];
    mkov.fillColor = [UIColor redColor];
    mkov.strokeColor = [UIColor redColor];
    mkov.lineWidth = 3;  
    overlayView = mkov;


    return overlayView;
    } else {
        NSLog(@"In here");
        MKPolygonView *mkpv = [[MKPolygonView alloc] initWithPolygon:overlay];
        mkpv.fillColor = [UIColor blueColor];
        mkpv.strokeColor = [UIColor blueColor];
        mkpv.lineWidth = 3;
        overlayView = mkpv;
        return overlayView;
    }
}

三角形のポイントは正しいようです:(ここでの1つのテスト:ベースx:43.000000 y:25.500000 ax:50.000000 y:58.000000 bx:73.000000 y:38.000000)が、viewForOverlayが呼び出されることはありません...

4

1 に答える 1

1

CGPointをCLLocationCoordinate2Dに変換し直してから、三角形を作成することで問題を解決しました。

    init = [mapView convertPoint:base toCoordinateFromView:mapView];
    mp[0] = init;
    init = [mapView convertPoint:a toCoordinateFromView:mapView];
    mp[1] = init;
    init = [mapView convertPoint:b toCoordinateFromView:mapView];
    mp[2] = init;
    MKPolygon* triangle = [MKPolygon polygonWithCoordinates:mp count:3];

なぜpolygonWithPointsで機能しなかったのかわかりませんが、座標では機能します。

于 2012-04-27T13:56:17.583 に答える