如何在MapView中的一系列CLLocationCoordinate之间绘制一条恒定线

时间:2018-07-27 13:03:16

标签: swift mapkit

我有一个CLLocationCoordinate数组。我想画一条恒定的线。这条线将链接每个相邻的CLLocationCoordinate,所以当CLLocationCoordinates’的距离非常近时,该线看起来就像一条曲线。我想知道如何开发它吗? 我试图像这样使用MKPolyLine:

var polyline:MKPolyline=MKPolyline(coordinates: arrcoordinate, count: arrcoordinate.count);

但是它不符合我的愿望。我也尝试过像MKGeodesicPolyline一样,它也不符合我的愿望。

我只是简化了这个探针,所以我制作了一个如下的CLLocationCoordinate数组:

var arrcoordinate:[CLLocationCoordinate2D]=[CLLocationCoordinate2D].init();
        arrcoordinate.append(CLLocationCoordinate2D.init(latitude: 100, longitude: 39));
        arrcoordinate.append(CLLocationCoordinate2D.init(latitude: 128, longitude: 33));
        arrcoordinate.append(CLLocationCoordinate2D.init(latitude: 118, longitude: 55));
        arrcoordinate.append(CLLocationCoordinate2D.init(latitude: 122, longitude: 57));
        print(arrcoordinate)
        var polyline:MKPolyline=MKPolyline.init(coordinates: &arrcoordinate, count: arrcoordinate.count);
        self.MapView.addOverlay(polyline);

并使OverlayRender委托像这样:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is MKPolyline {
            var polylineRenderer=MKPolylineRenderer.init(overlay: overlay);
            polylineRenderer.strokeColor = UIColor.white;
            polylineRenderer.lineWidth=2
            return polylineRenderer
        }

        return MKOverlayRenderer.init();
    }

但是地图视图上没有任何行,所以我不知道为什么?

1 个答案:

答案 0 :(得分:0)

对我来说很好。

enter image description here

我不得不稍微更改一下代码,因为您的坐标是荒谬的。所以我的代码版本如下:

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {
    @IBOutlet weak var map: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.map.delegate = self
        var arrcoordinate = [CLLocationCoordinate2D]()
        arrcoordinate.append(CLLocationCoordinate2D(latitude: 0, longitude: 39))
        arrcoordinate.append(CLLocationCoordinate2D(latitude: 28, longitude: 33))
        arrcoordinate.append(CLLocationCoordinate2D(latitude: 18, longitude: 55))
        arrcoordinate.append(CLLocationCoordinate2D(latitude: 22, longitude: 57))
        let polyline = MKPolyline(coordinates: &arrcoordinate, count: arrcoordinate.count)
        self.map.add(polyline)
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is MKPolyline {
            let polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.strokeColor = .red
            polylineRenderer.lineWidth = 2
            return polylineRenderer
        }
        return MKOverlayRenderer()
    }
}
相关问题