2016-12-20 5 views
2

실제 주소를 전달하여 Apple지도 앱의 운전 방향 화면을 여는 기능을 구현하려고합니다.주소를 통과하여 Apple Maps의 운전 방향을 여는 방법

주소는 임의의 주소가 아니라 사업장 주소가 대부분 Apple지도에 등록되고 검색 가능합니다. 따라서 주소를 전달하면 일치해야하며지도에서 알 수없는 특수 효과를 가리키는 대신 해당 비즈니스에 대한 방향을 올바르게 표시해야합니다. 이러한 경우는 경도와 위도를 직접 전달할 때 발생하므로 geocodeAddressString()을 사용하여 주소를 geocoordination으로 변환하지 않으려합니다.

어떻게하면됩니까?

답변

4

단순히 Apple Maps API를 사용하십시오. Apple Maps에서 이름을 알려서 비즈니스를 찾을 수 있다면 API를 통해 찾을 수 있습니다. 귀하의 경우, 올바른 매개 변수는 다음과 같이 daddr입니다 : 당신은 지원의 목록을 찾을 수 있습니다

http://maps.apple.com/?saddr=1024+Market+St,+San+Francisco,+CA&daddr=1+Infinite+Loop,+Cupertino,+CA

:

http://maps.apple.com/?daddr=1+Infinite+Loop,+Cupertino,+CA

당신은 당신의 시작 위치로 여러 매개 변수를 결합 할 수 있습니다 매개 변수 here. 아이폰 OS 10 - -

UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)를 통해 URL을 엽니 다 기억 나 (니콜라에 의해 설명 된대로) UIApplication.shared.open(url: URL)

+0

이드는 프로토콜을 피하고 MKMapItems를 사용합니다.이 코드는 결국 –

+0

으로 작성되었습니다. 그리고 URL도 .. 당신은 URLEncoding 및 모든 것에 대해 걱정해야 할거야 :) –

+0

@Nicola Giancecchi 코드를 가져 주셔서 감사합니다. 그것은 잘 작동 – androisojavaswift

0

당신은 URL과지도를 호출 할 수 있지만,이에 대한 적절한 API가 : MKMapItem

  1. 은 기본적으로 당신이 관심 장소/주소 [1 이상]에 대한지도 항목을 만들
  2. 그들

    [방향으로 시작하기위한 launchOptions를 사용]을
  3. 열린지도

    func showMap() { 
        //--- 
        //create item 1 
    
        //address 
        let coords = CLLocationCoordinate(coordinateField.doubleValue!,coordinateField.doubleValue!) 
        let addressDict = 
          [CNPostalAddressStreetKey: address.text!, 
          CNPostalAddressCityKey: city.text!, 
          CNPostalAddressStateKey: state.text!, 
          CNPostalAddressPostalCodeKey: zip.text!]   
        //item 
        let place = MKPlacemark(coordinate: coords!, 
              addressDictionary: addressDict) 
        let mapItem = MKMapItem(placemark: place) 
    
        //--- 
        //create item 2 
    
        //address 
        let coords2 = CLLocationCoordinate(coordinateField2.doubleValue!,coordinateField2.doubleValue!) 
        let addressDict2 = 
          [CNPostalAddressStreetKey: address2.text!, 
          CNPostalAddressCityKey: city2.text!, 
          CNPostalAddressStateKey: state2.text!, 
          CNPostalAddressPostalCodeKey: zip2.text!] 
        //item2 
        let place2 = MKPlacemark(coordinate: coords2!, 
              addressDictionary: addressDict2) 
        let mapItem2 = MKMapItem(placemark: place2) 
    
        //----- 
        //launch it  
        let options = [MKLaunchOptionsDirectionsModeKey: 
             MKLaunchOptionsDirectionsModeDriving] 
    
        //for 1 only.  
        mapItem.openInMaps(launchOptions: options) 
        //for 1 or N items 
        var mapItems = [mapItem, mapItem2] //src to destination 
        MKMapItem.openMaps(withItems:mapItems, launchOptions: options) 
    } 
    
+1

이 방법을 사용하는 전문가가 있습니다. 그러나 단점도 있습니다 : 1) @androisojavaswift는 주소 나 도시뿐만 아니라 그 이름으로 사업을 찾고 싶어합니다. 2) CNPostalAddress 키는 iOS 9.0부터 사용할 수 있습니다. URI 스키마는 iOS 6 이후로 사용됩니다. 3)이 코드 부분에 대해서만 연락처 프레임 워크를 가져와야합니다. –

+1

1) :) 이름으로 찾기 란 CLGeocoder가 당신을 위해하는 것입니다. 당신은 그 주소를 필요로하지 않는다 : 또는 심지어 좌표 : –

+1

2. 이전 버전의 sdk로 빌드 할 필요가있을 때이 키가 이전 버전의 주소록 키와 동일하므로 더 낮은 버전에서 작동한다. 3) 그렇지 않다면 당신은 어쨌든 장소를 원한다 :) –

관련 문제