【Swift】MKMapItemの使い方。目的地までの経路をマップアプリで検索する。(Swift 2.1、XCode 7.2)

2020年6月16日

目的地の場所が分かったあとに知りたいこと

前回までの記事で現在地や目的地にピンを刺す方法を説明してきた。⇒「記事

目的地の場所が分かったあとに必要な情報といえば「目的地までどのように行けば辿り着けるか。その所要時間はどのくらいか。」だ。そこで本記事では、現在位置からピンを刺した位置までの経路をマップアプリを用いて検索する方法を説明する。

経路を検索

 

以降の手順は「Map Kit Viewの使い方」の続きから行うので、実装を試してみる人は先に読んでおくことをお勧めする。

 

現在地を把握する機能を実装する

下図赤枠のinfo.plistをクリックしてプロパティ一覧を表示する。一覧にマウスカーソルを持っていくと下図黄緑枠の「+」ボタンが表示されるので押す。

Keyに「NSLocationWhenInUseUsageDescription」、Typeに「String」、Valueに「現在位置を地図に表示するために利用します。」を入力する。これは、位置情報サービスの設定項目に「このAppの使用中のみ許可」を追加するための設定である。

plistに項目を追加する

 

ストーリーボードに戻り、マップビューをクリックして選択する。下図赤枠のアトリビュートインスペクタボタンを押して設定画面を開き、User Locationにチェックを入れる。これはマップにユーザーの現在位置を点灯させるための設定である。

User Locationにチェックを入れる

 

ViewController.swiftを以下のコードに変更する。起動時に現在位置を取得して地図の中心座標を現在位置に設定している。

 

この時点で動作確認をしておこう。以下は実際のプレイ動画。現在位置を中心とした地図が表示され、現在位置が点滅している。

マップアプリを使って経路を検索する機能を実装する。

次に、地図を長押しした座標にピンが刺さり、ピンの吹き出しにあるボタンを押すとマップアプリが起動する動きを実装する。

Long Press Gesture Recognizerをマップビューに配置する(下図赤矢印)。部品一覧に下図黄緑枠のジェスチャーリコグナイザーが追加される。

紫枠のアシスタントエディタボタンを押してViewController.swiftを開く。Ctrlキーを押しながらジェスチャーリコグナイザーをドラッグ&ドロップでソースコードまで運んで吹き出しの設定画面を表示する(青矢印)。

Connectionに「Action」、Nameに「pressMap」、Typeに「UILongPressGestureRecognizer」を入力し、Connectボタンを押す。これで長押しのイベントをソースコードで受けれるようになった。

Long Press Gesture Recognizerをデバイス画面に配置する

 

ViewController.swiftを以下のコードに変更する。

地図が長押しされたらその座標にピンを刺している。ピンの吹き出しには経路ボタンがあり、ボタンが押されたらマップアプリを起動する。

オプションは「車で移動」、「ハイブリッド表示」で起動し、起動後に現在地から目的地までの経路の候補と所要時間が表示されるので、経路を選択して「出発」ボタンを押すと案内が開始する。

 

以下は実際のプレイ動画。

 

下表は、起動オプションに設定できる項目の一覧。動作確認は1と2のみ実施⇒「公式リファレンス

設定名 説明
1 MKLaunchOptionsDirectionsModeKey 目的地までの移動方法を車、徒歩、交通機関から選択する。
2 MKLaunchOptionsMapTypeKey マップの表示形式を標準、衛生、ハイブリット、SatelliteFlyover、HybridFlyoverから選択する。
3 MKLaunchOptionsMapCenterKey マップの中心座標を指定する。
4 MKLaunchOptionsMapSpanKey マップの表示範囲を指定する。
5 MKLaunchOptionsShowsTrafficKey 交通情報を表示するかをtrue、falseで設定する。
6 MKLaunchOptionsCameraKey 3Dカメラの位置、角度を設定する。