[iOS] swift4対応 地図アプリをアプリ上から起動する


はじめに

swiftでiOSアプリ上から地図アプリを起動する方法をまとめました。
基本はgoogleマップを起動を試み、インストールされていない場合はiOS標準のマップを起動するようにします。

参考になる記事は多くありますが、googlemapとiOS標準のマップ両方に対応する最新版の情報がなかったため、この記事を書きました。

参考にしたのは主にこの2つの記事です。
iOSアプリで外部マップアプリ(標準・google map)を起動する
Google Mapsを起動する(Swift)

※動作環境:xcode9.4.1, swift4.1

コード

let latitude = "35.692096424393867"
let longitude = "139.77235727788792"
let urlString: String!
if UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!) {
    urlString = "comgooglemaps://?daddr=\(latitude),\(longitude)&directionsmode=walking&zoom=14"
    }
else {
    urlString = "http://maps.apple.com/?daddr=\(latitude),\(longitude)&dirflg=w"
    }
if let url = URL(string: urlString) {
    UIApplication.shared.open(url)
    }
UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)

でgoogleマップが開けるかを確認し、それによってurlスキームを切り替えます。

urlスキームの登録

なお,使用するurlスキームはinfo.plistのLSApplicationQueriesSchemesに登録しておく必要があります。

LSApplicationQueriesSchemesキーは自分で新たにinfo.plistに追加します。
+ボタンを押して新たなキーを追加し、そこに直接LSApplicationQueriesSchemesと入力してください。

追加できたら、タイプをArrayに変更します。

キー名の左の▶︎をクリックして▼にしてから、+を押してキーを追加。
そこのバリューにcomgooglemapsと入力すればOKです。

urlスキームのパラメータをいじって地図を使いこなす

googleマップの場合

基本的なパラメータ

"comgooglemaps://?center=40.765819,-73.975866&views=traffic&mapmpde=standard&zoom=14"

のようにcomgooglemaps://?の後に続いてパラメータを書き足すことで、開いた後の地図に対して様々な指定をすることが可能です。

パラメータ 効果
center latitude(緯度),longitude(経度) 指定した緯度経度の位置を中心に表示する。
mapmode standard or streetview 普通の地図かストリートビューの指定。指定なしなら、直前のアプリの設定が適用される。
views satellite, traffic, or transit 航空写真、交通状況、路線図の指定。satellite,trafficと繋げることで複数指定可能
zoom 整数値 地図の倍率を指定

検索


"comgooglemaps://?q=Pasta&center=37.759748,-122.427135"

とすれば、centerで指定した地点を中心にパスタ屋を検索できます。

ルート検索


"comgooglemaps://?saddr=\(latitude1),\(longitude1)?daddr=\(latitude2),\(longitude2)&directionsmode=driving"

とすれば始点と目的地を指定してルート検索できます。

パラメータ 効果
saddr latitude(緯度),longitude(経度) 指定した緯度経度の位置を始点に指定。指定がない場合は現在地が始点となる。
daddr latitude(緯度),longitude(経度) 指定した緯度経度の位置を目的地に指定。
directionsmode riving, transit, bicycling or walking 交通手段を指定。

saddrdaddrは住所の文字列でも指定できますが、その場合はurlをエンコードする必要があります。
参考→Google Mapsを起動する(Swift)

さらに詳しくはリファレンスを直接参照してください。
Google Maps URL Scheme for iOS

iOS標準のマップの場合

きれいにまとまっているのでリファレンスを直接参考してください。
googleマップの方が指定できるパラメータは多く、機能が多彩です。
Apple URL Scheme Reference

アプリ内で地図を表示する方法

アプリ内にgoogleマップを表示するにはgoogleの提供するSDKを導入する必要があります。
Google Maps SDK for iOS の使い方(Swift 4対応)