Route not showing in MKMapView?

后端 未结 2 616
醉话见心
醉话见心 2020-12-12 07:01

I have these method that adds routes for MKMapView between two CLLocation. i have both valid pickUpDistanceLocation & dropOffDistanceLocation



        
相关标签:
2条回答
  • 2020-12-12 08:00

    For Swift 2.1 :

    func addRoutesOverLayForMapView(){
    
        var source:MKMapItem?
        var destination:MKMapItem?
        let Scoordinate = CLLocationCoordinate2D(latitude: passLat, longitude: passLong)
        var sourcePlacemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: passLat, longitude: passLong), addressDictionary: nil)
        source = MKMapItem(placemark: sourcePlacemark)
    
        let DCoordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
        var desitnationPlacemark = MKPlacemark(coordinate: DCoordinate, addressDictionary: nil)
        destination = MKMapItem(placemark: desitnationPlacemark)
        let request:MKDirectionsRequest = MKDirectionsRequest()
        request.source = source
        request.destination = destination
        request.transportType = MKDirectionsTransportType.Walking
    
        let directions = MKDirections(request: request)
        directions.calculateDirectionsWithCompletionHandler ({
            (response: MKDirectionsResponse?, error: NSError?) in
    
            if error == nil {
    
                self.showRoute(response!)
            }
            else{
    
                print("some error")
    
            }
        })
    }
    
    func showRoute(response:MKDirectionsResponse){
        for route in response.routes {
            mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
            let routeSeconds = route.expectedTravelTime
            let routeDistance = route.distance
            print("distance between two points is \(routeSeconds) and \(routeDistance)")
    
    
        }
    
    }
    
    
    func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    
         let polylineRenderer = MKPolylineRenderer(overlay: overlay)
    
        if overlay is MKPolyline {
            polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
            polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
            polylineRenderer.lineWidth = 2.5
            return polylineRenderer
        }
        return polylineRenderer
    
    }
    
    0 讨论(0)
  • 2020-12-12 08:03

    Actually both source and destination variables were nil.. So i got bad response from the server.If you need just try the below code

    func addRoutesOverLayForMapView(){
    
        var source:MKMapItem?
        var destination:MKMapItem?
        var sourcePlacemark = MKPlacemark(coordinate: pickUpDistanceLocation!.coordinate, addressDictionary: nil)
        source = MKMapItem(placemark: sourcePlacemark)
    
        var desitnationPlacemark = MKPlacemark(coordinate: dropOffDistanceLocation!.coordinate, addressDictionary: nil)
        destination = MKMapItem(placemark: desitnationPlacemark)
        let request:MKDirectionsRequest = MKDirectionsRequest()
        request.setSource(source)
        request.setDestination(destination)
        request.transportType = MKDirectionsTransportType.Walking
    
        let directions = MKDirections(request: request)
        directions.calculateDirectionsWithCompletionHandler ({
            (response: MKDirectionsResponse?, error: NSError?) in
    
            if error == nil {
    
                self.showRoute(response!)
            }
            else{
    
            println("trace the error \(error?.localizedDescription)")
    
            }
        })
     }
    
    func showRoute(response:MKDirectionsResponse){
        for route in response.routes as! [MKRoute]{
            mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
            var routeSeconds = route.expectedTravelTime
            let routeDistance = route.distance
            println("distance between two points is \(routeSeconds) and \(routeDistance)")
    
    
        }
    
    }
    

    And you should implement this delegate method,dont forget to set the mapview delegate

      func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    
            if overlay is MKPolyline {
                var polylineRenderer = MKPolylineRenderer(overlay: overlay)
                polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
                polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
                polylineRenderer.lineWidth = 2.5
                return polylineRenderer
            }
            return nil
    
        }
    
    0 讨论(0)
提交回复
热议问题