functions delegate current annotation ios iphone swift mapkit

ios - delegate - ¿Cómo dibujar una ruta entre dos ubicaciones usando MapKit en Swift?



mkmapview events (2)

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 }

¿Cómo puedo dibujar una ruta entre la ubicación actual del usuario a una ubicación específica usando MapKit en Swift?

Busqué mucho, pero no encontré ningún enlace o tutorial útil de Swift.


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 }

El retorno es una serie de rutas posibles, normalmente solo queremos mostrar la primera. Las anotaciones son las anotaciones del mapa.