Android 向け Google マップ インテント

Android 向け Google マップ アプリでは、複数のインテントが公開されており、 表示、検索、ナビゲーション、ストリートビューの各モードで Google マップを起動できます。アプリにマップを埋め込む場合は、Maps SDK for Android のクイックスタートをご覧ください。

Android Automotive OS(AAOS)プラットフォームには、固有の考慮事項 と追加のインテントがあります。詳しくは、Google Maps for Android Automotive インテントのドキュメントをご覧ください。

概要

インテントを使用すると、Intent オブジェクトで実行するアクション (「地図を表示する」、「 空港までのルートを表示する」など)を記述して、別のアプリでアクティビティを開始できます。Android 向け Google マップ アプリ では、複数のインテントがサポートされており、Google マップ アプリを起動して 次の 4 つのアクションのいずれかを実行できます。

  1. 指定した場所とズームレベルで地図を表示する。
  2. 場所を検索して地図上に表示する。
  3. ある場所から別の場所までのルートをリクエストする。ルートは、 車、徒歩、自転車の 3 つの移動手段で取得できます。
  4. Google ストリートビューでパノラマ画像を表示する。

このページでは、Android 向け Google マップ アプリで使用できるインテントについて説明します。インテントについて詳しくは、インテントとインテント フィルタ共通インテントをご覧ください。

インテント リクエスト

インテントを使用して Google マップを起動するには、まず Intent オブジェクトを作成し、そのアクション、URI、パッケージを指定する必要があります。

  • アクション: Google マップのインテントはすべて、View アクションとして呼び出されます — ACTION_VIEW
  • URI: Google マップのインテントでは、選択したアクションを指定する URL エンコードされた URI と、アクションを実行するためのデータが使用されます。
  • パッケージ: setPackage("com.google.android.apps.maps") を呼び出すと、Android 向け Google マップ アプリがインテントを処理します。パッケージが設定されていない場合、システムは Intent を処理できるアプリを判断します。複数の アプリが利用可能な場合、使用するアプリをユーザーに確認するメッセージが表示されることがあります。

Intent を作成したら、さまざまな方法で関連 アプリを起動するようシステムにリクエストできます。一般的な方法としては、IntentstartActivity() メソッドに渡す方法があります。システムは必要なアプリ( この場合は Google マップ)を起動し、対応する Activityを開始します。

Java

// Create a Uri from an intent string. Use the result to create an Intent.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");
// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);

Kotlin

// Create a Uri from an intent string. Use the result to create an Intent.
val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988")
// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps")
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent)

インテントに応答できるアプリをシステムが特定できない場合、アプリが クラッシュする可能性があります。そのため、これらのインテントのいずれかをユーザーに提示する前に、受信アプリが インストールされていることを確認してください。

インテントを受信するアプリが利用可能かどうかを確認するには、 resolveActivity() オブジェクトで Intent を呼び出します。結果が null 以外の場合は、インテントを処理できるアプリが少なくとも 1 つ存在するため、 startActivity()を安全に呼び出すことができます。結果が null の場合は、インテントを使用しないでください。 可能であれば、インテントを呼び出す機能を無効にしてください。

Java

if (mapIntent.resolveActivity(getPackageManager()) != null) {
    ...
}

Kotlin

mapIntent.resolveActivity(packageManager)?.let {
    ...
}

たとえば、サンフランシスコの地図を表示するには、次のコードを使用します。

Java

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(mapIntent);
}

Kotlin

val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
mapIntent.resolveActivity(packageManager)?.let {
    startActivity(mapIntent)
}

URL エンコードされたクエリ文字列

Google マップのインテントに渡される文字列はすべて、URI エンコードする必要があります。たとえば、 文字列 1st & Pike, Seattle1st%20%26%20Pike%2C%20Seattle になります。 文字列内のスペースは %20 でエンコードするか、プラス記号 (+)に置き換えることができます。

android.net.Uri encode() メソッドを使用して、文字列をエンコードできます。 次に例を示します。

Java

Uri gmmIntentUri =
    Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));

Kotlin

val gmmIntentUri =
    Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))

地図を表示する

geo: インテントを使用して、指定した場所とズームレベルで地図を表示します。

geo:latitude,longitude?z=zoom

パラメータ

  • latitudelongitude は、地図の中心点を設定します。
  • z は、地図の初期ズームレベルを任意で設定します。指定できる値の範囲は 0(全世界)~ 21(個々の建物)です。上限は、選択した場所で利用可能な地図データによって 異なります。

Java

// Creates an Intent that loads a map of San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Creates an Intent that loads a map of San Francisco
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

場所を検索する

このインテントを使用すると、指定したビューポート内で検索クエリを表示できます。クエリの結果が 1 つの場合は、このインテントを使用して、ランドマーク、ビジネス、地理的特徴、町など、特定の場所や住所にピンを表示できます。

geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
geo:0,0?q=latitude,longitude(label)

パラメータ

地図の表示に使用するパラメータに加えて、検索では次の パラメータがサポートされています。

  • q は、地図上でハイライト表示する場所を定義します。q パラメータは すべての検索リクエストで必須です。場所の名前または住所のいずれかとして場所を受け入れます。文字列は URL エンコードする必要があります。そのため、 City Hall, New York, NY などの住所は City+Hall,New+York,NY に変換する必要があります。

  • label を使用すると、地図上で特定された場所にカスタムラベルを設定できます。 label は文字列として指定する必要があります。

一般的な検索キーワードを渡すと、Google マップは、指定した緯度と経度の近くで条件に一致する場所を検索します。場所が指定されていない場合、Google マップは近くのリスティングを検索します。次に例を示します。

Java

// Search for restaurants nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
// Search for restaurants in San Francisco.
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Search for restaurants nearby.
val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
// Search for restaurants in San Francisco.
val gmmIntentUri =
    Uri.parse("geo:37.7749,-122.4194?q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
サンフランシスコのレストランを検索する
図 1.サンフランシスコのレストランを検索する

検索結果をさらに絞り込むには、クエリ文字列とともにズーム パラメータを指定します。次の例では、ズームを 10 に追加すると、 近くではなく都市レベルでレストランを検索します。

Java

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

特定の住所を検索すると、その場所にピンが表示されます。

Java

Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

上記の例では、緯度と経度を 00 に設定していますが、 住所をクエリ文字列として渡しています。特定の場所を検索する場合、緯度 と経度は必須ではありません。ただし、正確な住所がわからない場合は、座標を指定して検索結果を絞り込むことができます。たとえば、「Main Street」の住所検索を実行すると、結果が多すぎる可能性があります。

Java

// Searching for 'Main Street' returns too many results.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");

Kotlin

// Searching for 'Main Street' returns too many results.
val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")

インテント URI に緯度と経度を追加すると、結果が特定の地域に 偏ります。

Java

// Searches for 'Main Street' near San Francisco.
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Searches for 'Main Street' near San Francisco.
val gmmIntentUri =
    Uri.parse("geo:37.7749,-122.4194?q=101+main+street")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

検索で 1 つの値が返されることがわかっている場合は、オプションのラベルを渡すことができます。ラベルは文字列として指定する必要があり、 地図マーカーの下に表示されます。ラベルは、q が緯度と経度の座標として指定されている場合にのみ使用できます。

Java

// Display a label at the location of Google's Sydney office.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Display a label at the location of Google's Sydney office.
val gmmIntentUri =
    Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

番地や緯度と経度の代わりに、 Plus Code を使用して既知の場所にピンを表示することもできます。

Java

// Display the location of Google, San Francisco using a global plus code.
Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX");
// Equivalently, define the same location using a local plus code.
gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco");
// Construct and use the Intent as in the preceding examples.

Kotlin

// Display the location of Google, San Francisco using a global plus code.
var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX")
// Equivalently, define the same location using a local plus code.
gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco")
// Construct and use the Intent as in the preceding examples.

ターンバイターン方式のナビを起動する

このインテント URI を使用すると、指定した住所または座標までのターンバイターン方式のルート案内で Google マップのナビゲーションを起動できます。ルートは常にユーザーの現在地から表示されます 。

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude  

パラメータ

  • q: ナビゲーション検索のエンドポイントを設定します。この値には、緯度 と経度の座標、またはクエリ形式の住所を指定できます。複数の結果を返すクエリ 文字列の場合は、最初の結果が選択されます。

  • mode は、移動手段を設定します。mode は省略可能で、 次のいずれかに 設定できます。

    • d(車)(デフォルト)
    • b(自転車)
    • l(二輪車)
    • w(徒歩)
  • avoid は、ルートで回避する機能を設定します。avoid は省略可能で、 次の 1 つ以上に設定できます。

    • t(有料道路)
    • h(高速道路)
    • f(フェリー)

次の Intent リクエストは、オーストラリアの シドニーにあるタロンガ動物園までのターンバイターン方式のナビゲーションをリクエストします。

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
タロンガ動物園へのアクセス
図 2.タロンガ 動物園
までのルート

有料道路の通行やフェリーの利用を避けたい場合は、これらの機能を回避するルートを リクエストできます。

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

少し運動したい場合は、自転車のルートをリクエストできます。

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

二輪車を利用したい場合は、 車では通行できない狭い道路やトレイルを含むルートをリクエストできます。次の intent は、インドのルートを返します。

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
    Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

ストリートビュー パノラマを表示する

google.streetview インテントを使用して、Google ストリートビューを起動します。Google ストリート ビューは、対象地域全体について、指定された場所からのパノラマビューを提供します。ユーザーが投稿したフォトスフィアや、ストリートビューの特別 コレクションも利用できます。

google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt
google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt

パラメータ

すべての google.streetview URI には、cbll パラメータまたは panoid パラメータのいずれかを含める必要があります。

  • cbll は、緯度と経度をカンマ区切りの値 (46.414382,10.013988)として受け取ります。アプリには、この場所の近くで撮影されたパノラマが表示されます。ストリートビューの画像は定期的に 更新され、撮影位置が毎回わずかに異なる場合があるため、画像が更新されると現在地が別の パノラマにスナップされる可能性があります。

  • panoid は特定のパノラマ ID です。 `panoid` と `cbll` の両方が指定されている場合、Google マップはパノラマ ID を使用します。panoidcbllパノラマ ID は、 Android アプリから StreetViewPanoramaLocation オブジェクトで利用できます。

  • cbp は、 カメラの初期方向を調整するオプションのパラメータです。cbp パラメータは、5 つのカンマ区切りの値を受け取ります。これらの値はすべて 省略可能です。最も重要な値は、2 番目、4 番目、5 番目の値 で、それぞれ方位、ズーム、傾斜を設定します。最初と 3 番目の 値はサポートされていないため、0に設定する必要があります。

    • bearing: カメラのコンパス方位を北からの時計回りの度数で示します。真北が 0、東が 90、南が 180、西が
      1. 方位に渡される値は折り返されます。つまり、0°、360°、 720° はすべて同じ方向を指します。方位は、5 つのカンマ区切りの値のうち 2 番目の値 として定義されます。
    • zoom: カメラのズームレベルを設定します。デフォルトのズームレベルは 0 に設定されています。ズームを 1 にすると、倍率が 2 倍になります。ズームは、0 から現在のパノラマの最大ズームレベルの間に固定されます。 つまり、この範囲外の値は、範囲内の最も近い極値に設定されます。たとえば、-1 の値は 0 に設定されます。 ズームは、5 つのカンマ区切りの値のうち 4 番目の値です。
    • tilt: カメラの角度(上または下)を指定します。範囲は -90 から 0 を経て 90 までです。90 を指定すると真下を向き、0 は 水平を向き、-90 では真上を向きます。

ストリートビュー インテントの使用例を次に示します。

Java

// Displays an image of the Swiss Alps.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
// Uses a PanoID to show an image from Maroubra beach in Sydney, Australia.
Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
// Opens Street View between two Pyramids in Giza. The values passed to the
// cbp parameter angles the camera slightly up, and towards the east.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Displays an image of the Swiss Alps.
val gmmIntentUri =
    Uri.parse("google.streetview:cbll=46.414382,10.013988")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
// Uses a PanoID to show an image from Maroubra beach in Sydney, Australia.
val gmmIntentUri =
    Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
// Opens Street View between two Pyramids in Giza. The values passed to the
// cbp parameter angles the camera slightly up, and towards the east.
val gmmIntentUri =
    Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
ストリートビューのピラミッド
図 3.ストリートビューのピラミッド