MKDirections:方向不可用

时间:2018-03-05 09:16:52

标签: ios swift mkdirection

我正在创建一个类似 UBER 的应用,我正在使用 MapKit ,我想在两个位置之间显示路径使用以下代码

    viewMap.delegate = self

    let sourceLocation = CLLocationCoordinate2D(latitude: sourceLatitude, longitude: sourceLongitude)
    let destinationLocation = CLLocationCoordinate2D(latitude: destinationLatitude, longitude: destinationLongitude)

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

    let sourceMapItem = MKMapItem(placemark: sourcePlacemark)
    let destinationMapItem = MKMapItem(placemark: destinationPlacemark)

    let sourceAnnotation = MKPointAnnotation()
    sourceAnnotation.title = strSource

    if let location = sourcePlacemark.location {
        sourceAnnotation.coordinate = location.coordinate
    }


    let destinationAnnotation = MKPointAnnotation()
    destinationAnnotation.title = strDestination

    if let location = destinationPlacemark.location {
        destinationAnnotation.coordinate = location.coordinate
    }

    self.viewMap.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true )

    let directionRequest = MKDirectionsRequest()

    directionRequest.source = sourceMapItem
    directionRequest.destination = destinationMapItem
    directionRequest.transportType = .automobile

    let directions = MKDirections(request: directionRequest)

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

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

            return
        }

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

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

扩展HomeVC:MKMapViewDelegate

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let renderer = MKPolylineRenderer(overlay: overlay)
    renderer.strokeColor = #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)
    renderer.lineWidth = 2.0

    return renderer
}

我已经检查了所有可能的解决方案,我也获得了源和目的地位置的经度和经度,但我仍然无法正常工作,我收到了以下错误。

请帮助我!

enter image description here

2 个答案:

答案 0 :(得分:1)

Apple地图指示仅适用于特定国家/地区。请在此处查看完整列表。 Apple Map Availability list(签入地图:路线部分)。您应该在应用中查看Google Map SDK,其目标是上面链接中未列出的国家/地区。

答案 1 :(得分:1)

这适用于我,它在MK地图中绘制目的地,也会聚焦到目的地

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        let request = MKDirectionsRequest()
        request.source = MKMapItem.forCurrentLocation()
        request.destination = MKMapItem(placemark: MKPlacemark(coordinate: (view.annotation?.coordinate)!))
        request.requestsAlternateRoutes = true
        request.requestsAlternateRoutes = true
        request.transportType = .walking
        let directions = MKDirections(request: request)
        directions.calculate { [unowned self] response, error in
            guard let unwrappedResponse = response else { return }

            for route in unwrappedResponse.routes {
                self.myMapView.add(route.polyline)                self.myMapView.setVisibleMapRect(route.polyline.boundingMapRect, animated: true)
                return
            }
        }

    }


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let polyLine = overlay
        let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
        polyLineRenderer.strokeColor = UIColor.blue
        polyLineRenderer.lineWidth = 2.0
        return polyLineRenderer
    }

当您单击MKAnnotationView时,如果您想从另一个代码中绘制,您只需将代码剪切到您的函数并更改行

request.destination = MKMapItem(placemark: MKPlacemark(coordinate: (view.annotation?.coordinate)!))

request.destination = MKMapItem(placemark: MKPlacemark(coordinate: (CLLocationCoordinate2D(/*Your Location*/))!))