此时,我正在试图弄清楚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.") }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。