此时,我正在试图弄清楚MKMapView上的坐标是否在提前绘制出来的纬度/经度的MKPolygon内.
我正在使用CGPathContainsPoint来确定坐标是否在地图上的多边形内,但无论我选择哪个坐标,它总是返回false.
任何人都可以解释究竟出了什么问题?下面是我在Swift中的代码.
class ViewController: UIViewController,MKMapViewDelegate @IBOutlet weak var mapView: MKMapView! let initialLocation = CLLocation(latitude: 43.656734,longitude: -79.381576) let point = CGPointMake(43.656734,-79.381576) let regionRadius: CLLocationDistance = 500 let point1 = CLLocationCoordinate2D(latitude: 43.656734,longitude: -79.381576) var points = [CLLocationCoordinate2DMake(43.655782,-79.382094),CLLocationCoordinate2DMake(43.657499,-79.382310),CLLocationCoordinate2DMake(43.656656,-79.380497),CLLocationCoordinate2DMake(43.655782,-79.382094)] override func viewDidLoad() { super.viewDidLoad() centerMapOnLocation(initialLocation) let polygon = MKPolygon(coordinates: &points,count: points.count) mapView.addOverlay(polygon) var annotation = MKPointAnnotation() annotation.coordinate = point1 annotation.title = "Test" annotation.subtitle = "Test" mapView.addAnnotation(annotation) self.mapView.delegate = self } func centerMapOnLocation(location: CLLocation) { let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,regionRadius * 2.0,regionRadius * 2.0) mapView.setRegion(coordinateRegion,animated: true) } func mapView(mapView: MKMapView!,rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { if overlay is MKPolygon { let polygonView = MKPolygonRenderer(overlay: overlay) polygonView.strokeColor = UIColor.redColor() if CGPathContainsPoint(polygonView.path,nil,CGPointMake(43.656734,-79.381576),true) { print("True!!!!!") } else { println("False") } return polygonView } return nil }
解决方法
针对Swift 3进行了更新
let polygonRenderer = MKPolygonRenderer(polygon: polygon) let mapPoint: MKMapPoint = MKMapPointForCoordinate(coordinate) let polygonViewPoint: CGPoint = polygonRenderer.point(for: mapPoint) if polygonRenderer.path.contains(polygonViewPoint) { print("Your location was inside your polygon.") }