2012-04-26 2 views
1

Я пытаюсь нарисовать MKPolygon (треугольник) на моем карте, но он не отображается. Я также рисую линию, и она появляется, поэтому я не уверен, почему треугольник не является. Вот соответствующий код: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; 
    } 
} 

Точки треугольника, кажется, правы: (один тест здесь: основа х: 43,000000 у: 25,500000 топор: 50,000000 у: 58,000000 Ьх: 73,000000 у: 38,000000), но viewForOverlay никогда не называют ...

ответ

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, но он работает с координатами.

Смежные вопросы