2015-08-21 9 views
5

इस समय, मैं बाहर एक एक MKMapView पर समन्वय चाहे लगाने की कोशिश कर रहा हूँ एक MKPolygon अक्षांश/देशांतर के साथ समय से आगे बाहर खींचा के भीतर है।निर्धारित करना कि अक्षांश/रेखांश बिंदु मैपव्यू के भीतर एक एमके पोलिगॉन में है या नहीं?

मैं CGPathContainsPoint उपयोग कर रहा हूँ निर्धारित करने के लिए एक समन्वय नक्शे पर बहुभुज के भीतर है लेकिन यह हमेशा समन्वय मैं चुन की परवाह किए बिना झूठी देता है।

किसी को भी कृपया व्याख्या कर सकते हैं कि वास्तव में क्या गलत हो रहा है? स्विफ्ट में मेरा कोड नीचे है।

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 
    } 
+0

के लिए अपडेट किया गया हे आप "गलत" का उपयोग नहीं होता .. CGPathContainsPoint को अंतिम तर्क (घुमावदार शैली पथ प्राप्त करने के लिए)। – Fattie

+0

मैंने दोनों सत्य और झूठी कोशिश की लेकिन कोई फायदा नहीं हुआ। :( –

उत्तर

3

आप भ्रमित CGPoints है जो x कर रहे हैं और y आपके विचार, CLLocationCoordinate2Ds है, जो पृथ्वी पर निर्देशांक हैं साथ पर एक स्थान ओर इशारा करने वाले जोड़े के समन्वय। इस तरह और वर्तमान स्थान (viewDidLoad() में अपने बहुभुज से बनाए गए)

CGPathContainsPoint लिए, आप अपने polygonRenderer रास्ते में पास करना चाहते हैं:

let polygonRenderer = MKPolygonRenderer(polygon: polygon) 
let currentMapPoint: MKMapPoint = MKMapPointForCoordinate(locationManager.location?.coordinate) 
let polygonViewPoint: CGPoint = polygonRenderer.pointForMapPoint(currentMapPoint) 

if CGPathContainsPoint(polygonRenderer.path, nil, polygonViewPoint, true) { 
    print("Your location was inside your polygon.") 
} 

तो तुम जहाँ आप इस डाल दिया जाना चाहिए के बारे में सोचना चाहते कोड, जहां वर्तमान में आपके पास यह फ़ंक्शन के अंदर है जिसे जब भी एमकेओवरले स्क्रीन पर खींचा जाता है, और यह पूरी तरह से असंबंधित होता है।

2

स्विफ्ट 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.") 
} 
संबंधित मुद्दे