W tym momencie próbuję dowiedzieć się, czy współrzędne na MKMapView jest w MKPolygon sporządzony z wyprzedzeniem z szerokości/długości.Określanie, czy punkt szerokości/długości geograficznej znajduje się w obszarze MKPolygon w widoku mapy?
Używam CGPathContainsPoint do określenia, czy współrzędne znajdują się w wielokącie na mapie, ale zawsze zwraca wartość false, niezależnie od wybranej współrzędnej.
Czy ktoś może wyjaśnić, co dokładnie dzieje się nie tak? Poniżej znajduje się mój kod w 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
}
hej nie używać "false" (aby uzyskać ścieżkę likwidacji stylu) .. ostatni argument CGPathContainsPoint. – Fattie
Próbowałem zarówno prawda i fałsz, ale bez skutku. :( –