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

三角形的点似乎是正确的:(这里的一个测试:base x: 43.000000 y: 25.500000 ax: 50.000000 y: 58.000000 bx: 73.000000 y :38.000000),但是 viewForOverlay 永远不会被调用......

4

1 回答 1

1

我通过将我的 CGPoints 转换回 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 回答