Cómo determinar si una anotación está dentro de MKPolygonView (iOS)

Estoy tratando de calcular si una anotación específica (como el círculo azul de la ubicación del usuario) o una MKPinAnnotation está dentro de una capa MKPolygon en la vista del mapa.

Algún consejo para lograr esto?

A continuación, convierte las coordenadas en un CGPoint en la vista de polígono y utiliza CGPathContainsPoint para comprobar si ese punto está en la ruta (que puede ser no rectangular):

CLLocationCoordinate2D mapCoordinate = ...; //user location or annot coord MKMapPoint mapPoint = MKMapPointForCoordinate(mapCoordinate); MKPolygonView *polygonView = (MKPolygonView *)[mapView viewForOverlay:polygonOverlay]; CGPoint polygonViewPoint = [polygonView pointForMapPoint:mapPoint]; BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polygonView.path, NULL, polygonViewPoint, NO); 

Esto debería funcionar con cualquier vista de superposición que sea una subclase de MKOverlayPathView. En realidad, puede reemplazar MKPolygonView con MKOverlayPathView en el ejemplo.

Ligeramente modificado anteriormente para hacer cálculos para puntos / coordenadas en polígonos sin el uso de un MKMapView formateado como una extensión de la clase MKPolygon:

 //MKPolygon+PointInPolygon.h #import  #import  @interface MKPolygon (PointInPolygon) -(BOOL)coordInPolygon:(CLLocationCoordinate2D)coord; -(BOOL)pointInPolygon:(MKMapPoint)point; @end 

 //MKPolygon+PointInPolygon.m #import "MKPolygon+PointInPolygon.h" @implementation MKPolygon (PointInPolygon) -(BOOL)coordInPolygon:(CLLocationCoordinate2D)coord { MKMapPoint mapPoint = MKMapPointForCoordinate(coord); return [self pointInPolygon:mapPoint]; } -(BOOL)pointInPolygon:(MKMapPoint)mapPoint { MKPolygonRenderer *polygonRenderer = [[MKPolygonRenderer alloc] initWithPolygon:self]; CGPoint polygonViewPoint = [polygonRenderer pointForMapPoint:mapPoint]; return CGPathContainsPoint(polygonRenderer.path, NULL, polygonViewPoint, NO); } @end 

¡Disfrutar!