El siguiente convierte la coordenada a un CGPoint en la vista de polígono y utiliza CGPathContainsPoint para probar si ese punto está en la ruta de acceso (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 superposición ver que es una subclase de MKOverlayPathView. En realidad, puede reemplazar MKPolygonView con MKOverlayPathView en el ejemplo.
¿Funcionaría esto en MKPolygons con agujeros (polígonos internos)? –
@Greg Combs: si el polígono (o ruta de superposición) tiene agujeros, CGPathContainsPoint devolverá NO si el punto consultado está en un agujero. – Anna
@AnnaKarenina: cómo determinar este mismo mapCoordinateIsInPolygon value para un escenario con MKPolygon pero no map view? (porque todo lo que tengo es un conjunto de coordenadas, pero no se necesita una vista) –