MapKit Нарисуйте полигональную линию из координат Swift 5 - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть массив CLLocationCoordinate2D, и мне нужно нарисовать линию, соединяющую первый индекс с последним индексом в массиве.

Я видел ответы здесь и в других местах, но они в основном для пожилыхверсии swift, или для массива строк, которые вы сначала конвертируете в double или что-то еще, или только для одного местоположения.

Я попытался создать MKPolyline, viewForOverlay и т. д., но я не могу получить строкупоказывать.Чего мне не хватает?

let locationManager = CLLocationManager()
let regionRadius: CLLocationDistance = 3000
var locations: [CLLocationCoordinate2D] = []
var latitude: [CLLocationDegrees] = []
var longitude: [CLLocationDegrees] = []

override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self
        mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
        createAnnotations()
        centerMapOnLocation(location: initialLocation)
        var polyline = MKPolyline(coordinates: &locations, count: locations.count)
        mapView.addOverlay(polyline)
    }
    // MARK: - Create Annotaions
    func createAnnotations() {
        locations = zip(latitude, longitude).map(CLLocationCoordinate2D.init)
        AppLogger.logInfo("\(locations)")
        for location in locations {
            let annotation = MKPointAnnotation()
            annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)
            mapView.addAnnotation(annotation)
        }
    }
    // MARK: - Region Zoom
    func centerMapOnLocation(location: CLLocation) {
        let coordinateRegion = MKCoordinateRegion(center: location.coordinate,
                                                  latitudinalMeters: regionRadius,
                                                  longitudinalMeters: regionRadius)
      mapView.setRegion(coordinateRegion, animated: true)
    }
    // MARK: - Draw Polylines
    func mapView(mapView: MKMapView!, viewForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
        if (overlay is MKPolyline) {
            let pr = MKPolylineRenderer(overlay: overlay)
            pr.strokeColor = UIColor.blue.withAlphaComponent(0.5)
            pr.lineWidth = 5
            return pr
        }
        return nil
    }

Ожидаемый результат: Из массива мест мы по существу рисуем пройденный маршрут.Это не метод получения маршрута, так как диск уже занят.

1 Ответ

0 голосов
/ 19 сентября 2019

Сначала убедитесь, что ваш locations был пустым массивом или нет.

Во-вторых, viewForOverlay - это старый метод, который больше не используется (и даже тогда сигнатура метода неверна).

Вместоваш код, который создает средство визуализации в rendererFor:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    ...
}
...