MKPolygon 未绘制
Posted
技术标签:
【中文标题】MKPolygon 未绘制【英文标题】:MKPolygon not being drawn 【发布时间】:2012-04-26 20:52:38 【问题描述】:我试图在我的地图视图上绘制一个 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 a x: 50.000000 y: 58.000000 b x: 73.000000 y :38.000000),但是 viewForOverlay 永远不会被调用...
【问题讨论】:
【参考方案1】:我通过将我的 CGPoints 转换回 CLLocationCoordinate2D's 然后创建三角形解决了这个问题:
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,但它适用于坐标。
【讨论】:
以上是关于MKPolygon 未绘制的主要内容,如果未能解决你的问题,请参考以下文章
验证 latlong 是不是在 iOS 的 MKPolygon 内
是否可以在 ios 的 mapView 上集群 MKPolygon
如何向 MKPolyline 和 MKPolygon 添加描述?