2016-12-20 4 views
2

実際の住所を渡すことによって、Apple地図アプリの運転方向画面を開く機能を実装しようとしています。アドレスを渡すことによってApple Mapsの運転方向を開く方法

アドレスは単なるランダムなアドレスではなく、ほとんどがアップルマップで登録および検索可能なビジネスアドレスです。したがって、住所を渡すことによって、地図上の未知の注釈を指すのではなく、照合してそのビジネスの方向を正しく示す必要があります。このような場合は、経度と緯度を直接渡すので、geocodeAddressString()を使用して住所を地理座標に変換したくない場合に発生します。

どうすれば実現できますか?

答えて

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。 iOSの10で - -

UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)経由でURLを開くことを忘れないでくださいまたは(ニコラで詳述)UIApplication.shared.open(url: URL)

+0

Idはそれらがすべて –

+0

た後も、このために作られた...プロトコルおよび使用MKMapItemsを避けますか?あなたはURLエンコードとすべてについて心配する必要があります:) –

+0

@Nicola Giancecchiコードをありがとう。それはうまく動作します。 – androisojavaswift

0

あなたは、URLでマップを呼び出すことができますが、また、このための適切なAPIがあります:MKMapItem

  1. 基本的にあなたが

    [方向で始まるためlaunchOptionsを使用する]彼らと、[1またはそれ以上]
  2. オープン地図ランドマーク/アドレスのマップ項目を作成コード内の建物の文字列:

    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.キーは古いアドレス帳のキーと同じですので、古いバージョンのSDTでビルドする必要がある場合はこれより低いバージョンで動作します。とにかく場所を欲しいだけです:) –

関連する問題