2016-11-05 4 views
9

mapView.showUserLocation = true을 사용하여 사용자 위치를 플롯하고 내 MKMapView 개체에 주석으로 표시합니다.mapView 및 CLLocationManager를 사용하여 iOS Swift에서 두 위치 간 길 찾기 방법

이제 사용자의 위치를 ​​얻었을 때, 해당 좌표 세트에서 내 목적지까지의 경로를 표시하고 싶습니다. Error: Error Domain=MKErrorDomain Code=5 "Directions Not Available" UserInfo=0x1742f7600 {NSLocalizedFailureReason=A route could not be determined between these locations., MKErrorGEOError=-403, MKDirectionsErrorCode=1, NSLocalizedDescription=Directions Not Available}

좀했다 : 나는 다음과 같은 오류가 나는 그것을 디버깅을 시도 할 때,

func mapView(mapView: MKMapView, didUpdateUserLocation userLocation: MKUserLocation) { 
    mapView.showsUserLocation = true 
    print("test") 
    //Setting Up Source Location 
    let sourceLocation = self.mapView.userLocation.coordinate 
    let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil) 
    let sourceMapItem = MKMapItem(placemark: sourcePlacemark) 
    let sourceAnnotation = MKPointAnnotation() 
    sourceAnnotation.title = "You are Here" 

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

    //Setting Up Destination Location 
    let destinationLocation = CLLocationCoordinate2D(latitude: 28.6621292, longitude: 77.30198310000003) 
    let destinationPlacemark = MKPlacemark(coordinate: destinationLocation, addressDictionary: nil) 
    let destinationMapItem = MKMapItem(placemark: destinationPlacemark) 
    let destinationAnnotation = MKPointAnnotation() 
    destinationAnnotation.title = "Conclave is Here" 

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


    self.mapView.removeAnnotations(self.mapView.annotations) 
    self.mapView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true) 


    //Plotting a course from Source to Destination 
    let directionRequest = MKDirectionsRequest() 
    directionRequest.source = sourceMapItem 
    directionRequest.destination = destinationMapItem 
    directionRequest.transportType = .Automobile 

    // Calculate the direction 
    let directions = MKDirections(request: directionRequest) 

    // 8. 
    directions.calculateDirectionsWithCompletionHandler { 
     (response, error) -> Void in 

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

      return 
     } 

     let route = response.routes[0] 
     self.mapView.addOverlay((route.polyline), level: MKOverlayLevel.AboveRoads) 

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

} 

을하지만 : 나는 그것을하려고했던 방법은 다음이

에 대한 MKDirections이다 사용하여 시도 연구 한 결과 인도MKDirections을 사용할 수 없음을 알았습니다. 따라서 사용자에게 내비게이션 길 찾기를 표시하는 방법에 대해 궁금합니다.

도움 주셔서 감사합니다.

+0

최선의 선택은 GET 방향과 placeinformation에 대한 GOOGLEPLACEAPI를 사용합니다. –

답변

4
Error Domain=MKErrorDomain Code=5 "Directions Not Available" 

에 폴리 라인을 그릴 : 아이폰 OS 시뮬레이터에 http://www.apple.com/ios/feature-availability/#maps-directions

동안, 현재 위치를 쉽게 사용자 정의 할 수 있습니다. 두 가지 방법으로 그것을 할 :

iOS 시뮬레이터 -> '디버그'탭을 -> 위치 -> {선택}

엑스 코드 -> '디버그'탭 -> 위치를 시뮬레이션 -> {선택}

그래서 이것을 사용하는 것이 좋습니다. Google지도 SDK 및 경로를 그립니다.

https://gist.github.com/himanshu-benzatine/10670936c8f16ea1ae482bc6bb684adc

+0

감사합니다. 정말 도움이되었습니다. 그냥 C#에서 Swift로이 코드를 이식 할 경우 변경된 내용을 구문과 구별해야합니까? –

+0

예 코드를 C#에서 swift로 변경하면 구문과 메서드가 변경됩니다. –

+0

감사합니다. –

3

& 대상에서 폴리 라인을 그리려면 google api를 사용하는 것이 더 좋습니다. 당신은

https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=%@&destinations=%@&key=

는 그런 다음 경로를 그릴 수있는 곳에서 (들) 위도 긴의 JSON 데이터를 얻을 API를 사용할 수 있습니다. JSON 데이터를 디코딩하고 당신은 위치가이 목록에있는 국가 중 하나에 속하지 않는 경우이 오류가 발생 가능성이 가장 높은 MKMapkit

+0

Google지도와 Apple지도에는 동일한 기본 데이터가 없습니다. 이렇게하면 경로가 Apple지도에 존재하지 않는 도로를 그릴 수도 있고 Apple지도에서 도로가 그려지는 위치에서 몇 미터 떨어진 곳에 위치 할 수도 있습니다. –

+0

이렇게하려면 Apple Maps를 사용하는 대신 Google Maps SDK를 사용해야합니다. –