我希望能够判断水龙头是否在 MKPolygon 内。
我有一个 MKPolygon:
CLLocationCoordinate2D points[4];
points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);
MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];
[self.mapView addOverlay:poly];
//create UIGestureRecognizer to detect a tap
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:tapRecognizer];
它只是科罗拉多州的基本轮廓。
我设置了纬度/经度转换:
-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
{
CGPoint point = [recognizer locationInView:self.mapView];
CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view];
}
但如果我的分接点在 MKPolygon 内,我不确定如何技术。似乎没有一种方法可以进行此检查,所以我猜我需要将 MKPolygon 转换为 CGRect 并使用 CGRectContainsPoint。
MKPolygon 有一个 .points 属性,但我似乎无法让它们退出。
有什么建议么?
编辑:
以下两种解决方案都适用于 iOS 6 或更低版本,但会在 iOS 7 中中断。在 iOS 7 中,该polygon.path
属性总是返回NULL
. 安娜女士很友好地在这里提供了另一个 SO 问题的解决方案。它涉及从多边形点创建自己的路径以传递到CGPathContainsPoint()
.
我的多边形图像: