如何使用MapKit和swift绘制多边形叠加层

Sic*_*Liu 6 mapkit point-in-polygon ios swift

我试图获取以下代码在地图上绘制多边形但由于某种原因它不起作用.我在这里出了什么问题?

import UIKit
import MapKit

class ViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let initialLocation = CLLocation(latitude: 49.140838, longitude: -123.127886)
        centerMapOnLocation(initialLocation)
        addBoundry()
    }


    func addBoundry()
    {
        var points=[CLLocationCoordinate2DMake(49.142677,  -123.135139),CLLocationCoordinate2DMake(49.142730, -123.125794),CLLocationCoordinate2DMake(49.140874, -123.125805),CLLocationCoordinate2DMake(49.140885, -123.135214)]

        let polygon = MKPolygon(coordinates: &points, count: points.count)

        mapView.addOverlay(polygon)
    }


    let regionRadius: CLLocationDistance = 1000
    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.magentaColor()

        return polygonView
    }

    return nil
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 5

您似乎已经实现了mapView(_:renderFor:)(以前称为rendererForOverlay)全局函数.该方法必须在ViewController类定义中,或者更好的是,在MKMapViewDelegate扩展中保持我们的代码组织良好:

extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,请确保您已将视图控制器定义delegate为地图视图的视图.在IB中这样做可能最容易,但你也可以这样做viewDidLoad:

mapView.delegate = self
Run Code Online (Sandbox Code Playgroud)