2012-04-26 10 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; 
    } 
} 

点が右であると思われる:ここに関連するコードである(一つのテストここでは、ベースX:43.000000 Y:25.500000斧:50.000000 Y:58.000000 BX:73.000000のY:38.000000)、しかしviewForOverlayは...

答えて

1

呼ばないさん、私は戻ってCLLocationCoordinate2Dのに私CGPointsを変換して三角形を作成することによって、問題を解決:

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では動作しなかった理由を、私はわからないんだけど、それは座標と一緒に働く。

関連する問題