How to draw a route between two locations using MapKit in Swift?

后端 未结 4 573
孤独总比滥情好
孤独总比滥情好 2020-12-08 07:51

How can I draw a route between user\'s current location to a specific location using MapKit in Swift?

I searched a lot, but didn\'t find any helpful

4条回答
  •  春和景丽
    2020-12-08 08:20

    Swift 4

    class MapController: UIViewController, MKMapViewDelegate {
    
    // MARK: - showRouteOnMap
    
    func showRouteOnMap(pickupCoordinate: CLLocationCoordinate2D, destinationCoordinate: CLLocationCoordinate2D) {
    
        let sourcePlacemark = MKPlacemark(coordinate: pickupCoordinate, addressDictionary: nil)
        let destinationPlacemark = MKPlacemark(coordinate: destinationCoordinate, addressDictionary: nil)
    
        let sourceMapItem = MKMapItem(placemark: sourcePlacemark)
        let destinationMapItem = MKMapItem(placemark: destinationPlacemark)
    
        let sourceAnnotation = MKPointAnnotation()
    
        if let location = sourcePlacemark.location {
            sourceAnnotation.coordinate = location.coordinate
        }
    
        let destinationAnnotation = MKPointAnnotation()
    
        if let location = destinationPlacemark.location {
            destinationAnnotation.coordinate = location.coordinate
        }
    
        self.mapView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true )
    
        let directionRequest = MKDirectionsRequest()
        directionRequest.source = sourceMapItem
        directionRequest.destination = destinationMapItem
        directionRequest.transportType = .automobile
    
        // Calculate the direction
        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)
        }
    }
    
    // MARK: - MKMapViewDelegate
    
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    
        let renderer = MKPolylineRenderer(overlay: overlay)
    
        renderer.strokeColor = UIColor(red: 17.0/255.0, green: 147.0/255.0, blue: 255.0/255.0, alpha: 1)
    
        renderer.lineWidth = 5.0
    
        return renderer
    }
    

提交回复
热议问题