Отрисовка пройденного маршрута на MapView

mapkit
swift

#1

Добрый день!
Облазил кучу ресурсов на эту тему, но везде информация не точна.
У меня есть карта, на которой я хочу, чтобы маршрут пользователя отображался.
Фото к примеру:

Вот мой код:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!
    
    
    var locationManager: CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        
        let status = CLLocationManager.authorizationStatus()
        if status == .notDetermined || status == .denied || status == .authorizedWhenInUse {
            locationManager.requestAlwaysAuthorization()
            locationManager.requestWhenInUseAuthorization()
        }
        locationManager.startUpdatingLocation()
        locationManager.startUpdatingHeading()
        
        mapView.delegate = self
        mapView.showsUserLocation = true
        mapView.mapType = MKMapType(rawValue: 0)!
        mapView.userTrackingMode = MKUserTrackingMode(rawValue: 2)!
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func locationManager(manager: CLLocationManager!, didUpdateToLocation newlocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
        print("present location : \(newlocation.coordinate.latitude), \(newlocation.coordinate.longitude)")
        if let oldLocationNew = oldLocation as CLLocation?{
            let oldCoordinates = oldLocationNew.coordinate
            let newCoordinates = newlocation.coordinate
            var area = [oldCoordinates, newCoordinates]
            var polyline = MKPolyline(coordinates: &area, count: area.count)
            mapView.add(polyline)
        }
    }
    
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
            let pr = MKPolylineRenderer(overlay: overlay)
            pr.strokeColor = UIColor.red
            pr.lineWidth = 5
        return pr
    }

    
}

Карта работает как надо, но маршрут не отрисовывается. Подскажите, пожалуйста, что делать?


#2

Видео туториал на русском


#3

Либо статья от самого Ивана, правда 2016 года


#4

@RexHunt Привет! Спасибо большое за помощь :slight_smile: Проблема просто в том, что это построение маршрута между пунктами. А я ищу возможность, чтобы по моему маршруту, которому я прошел, строилось линия. Как в приложении Nike Run, когда можно посмотреть детали маршрута пройденного.


#5

Попробуйте заменить mapView.add() на mapView.addOverlay()


#6

@RexHunt , Нет не помогло. addOverlay был переименован в add(_:)


#7

Окей. Тогда в этом методе есть второй параметр level. Укажите его. В зависимости от того, как вы передвигаетесь.


#8

@RexHunt , попробовал .aboveRoads и .aboveLabel . Все равно без изменений :frowning: