Как нарисовать маршрут в mapKit? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть массив с координатами маршрута, который отображается на карте. Я не могу нарисовать линию моих координат на маршруте.

это мой класс:

я импортирую необходимые модули

import UIKit
import MapKit
import CoreLocation

тогда вот мой класс

class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {


    var locationManager = CLLocationManager()

    var location: [(Double, Double)]?
    var placeAnnotation:  [String]?
    var sourceLocation: CLLocationCoordinate2D!
    var indexPoint = 0


    @IBOutlet weak var mapView: MKMapView!

    let regionRadius: CLLocationDistance = 1000

    func centerMapOnLocation(location: CLLocation) {

        let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius, regionRadius)
        mapView.setRegion(coordinateRegion, animated: true)
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self

        drawPlaceMark()

    }

    func drawPlaceMark() {

        for (x,y) in location! {
            sourceLocation = CLLocationCoordinate2D(latitude: x, longitude: y)

            let destinationPlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil)

            let destinationMapItem = MKMapItem(placemark: destinationPlacemark)

            let sourceAnnotation = MKPointAnnotation()
            sourceAnnotation.title = placeAnnotation?[indexPoint]

            indexPoint = indexPoint + 1

            if let location = destinationPlacemark.location {
                sourceAnnotation.coordinate = location.coordinate
            }
            self.mapView.showAnnotations([sourceAnnotation,sourceAnnotation], animated: true )


            // Calculate the direction and draw line
            let directionRequest = MKDirectionsRequest()
            directionRequest.source = destinationMapItem

            directionRequest.destination = destinationMapItem
            directionRequest.transportType = .walking

            let directions = MKDirections(request: directionRequest)

            directions.calculate {
                (response, error) -> Void in

                guard let response = response else {
                    if let error = error {
                        print("Error: \(error)")
                    }
                    return
                }

                let route = response.routes[0]
                self.mapView.add((route.polyline), level: MKOverlayLevel.aboveRoads)

                let rect = route.polyline.boundingMapRect
                self.mapView.setRegion(MKCoordinateRegionForMapRect(rect), animated: true)
            }
        }
    }


}

если кто-то может помочь, скажите, пожалуйста, как сделать это правильно и правильно.

1 Ответ

0 голосов
/ 08 мая 2018

Реализация rendererFor метода.

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let renderer = MKPolylineRenderer(polyline: overlay as! MKPolyline)
    renderer.strokeColor = UIColor.red
    renderer.lineWidth = 3
    return renderer
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...