Nachfolgend wandelt die zu einer CGPoint im Polygon Ansicht Koordinate und verwendet CGPathContainsPoint zu testen, ob dieser Punkt in dem Pfad ist (was nicht rechteckig sein kann):
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);
mit jeder Überlagerung arbeitet Dies soll Ansicht, die eine Unterklasse von MKOverlayPathView ist. Im Beispiel können Sie MKPolygonView durch MKOverlayPathView ersetzen.
Funktioniert das auf MKPolygons mit Löchern (interne Polygone)? –
@Greg Combs: Wenn das Polygon (oder der Overlay-Pfad) Löcher aufweist, gibt CGPathContainsPoint NO zurück, wenn sich der abgefragte Punkt in einem Loch befindet. – Anna
@AnnaKarenina - Wie kann man denselben mapCoordinateIsInPolygon-Wert für ein Szenario mit MKPolygon ermitteln, aber keine Kartenansicht? (weil alles, was ich habe, ist eine Menge von Koordinaten, aber keine Notwendigkeit für eine Ansicht) –