Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 Swift-specific links or tutorials.

like image 876
Rawan Avatar asked Mar 28 '15 16:03

Rawan


People also ask

How do I create a route in MapKit?

Open Xcode and create a new Single View Application. For product name, use IOS9DrawRouteMapKitTutorial and then fill out the Organization Name and Organization Identifier with your customary values. Enter Swift as Language and make sure only iPhone is selected in Devices.

What are the available routing modes in MapKit?

Rendering Routes Into the Map polyline) mapView. setVisibleMapRect( mapView. visibleMapRect. union( mapRoute.


2 Answers

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 } 

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

like image 197
Abdelrahman Mohamed Avatar answered Oct 02 '22 04:10

Abdelrahman Mohamed


class MapController: UIViewController, MKMapViewDelegate {  func showRouteOnMap() {     let request = MKDirectionsRequest()     request.source = MKMapItem(placemark: MKPlacemark(coordinate: annotation1.coordinate, addressDictionary: nil))     request.destination = MKMapItem(placemark: MKPlacemark(coordinate: annotation2.coordinate, addressDictionary: nil))     request.requestsAlternateRoutes = true     request.transportType = .Automobile      let directions = MKDirections(request: request)      directions.calculateDirectionsWithCompletionHandler { [unowned self] response, error in         guard let unwrappedResponse = response else { return }          if (unwrappedResponse.routes.count > 0) {             self.mapView.addOverlay(unwrappedResponse.routes[0].polyline)             self.mapView.setVisibleMapRect(unwrappedResponse.routes[0].polyline.boundingMapRect, animated: true)         }     } }  func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {     if overlay is MKPolyline {             var polylineRenderer = MKPolylineRenderer(overlay: overlay)             polylineRenderer.strokeColor = UIColor.blueColor()         polylineRenderer.lineWidth = 5         return polylineRenderer     }     return nil } 

The return is an array of possible routes, usually we just want to show the first. The annotations are the map annotations.

like image 39
Renato Probst Avatar answered Oct 02 '22 04:10

Renato Probst