Android 向け Google マップ アプリには、表示、検索、ナビゲーション、ストリートビューの各モードで Google マップを起動する際に使用できるインテントがいくつか用意されています。アプリに地図を埋め込む場合は、Google Maps Android API のスタートガイドをご覧ください。
概要
インテントを使用すると、Intent
オブジェクトで実行する簡単なアクション(「地図を表示する」、「空港までのルートを表示する」など)を記述することで、別のアプリのアクティビティを開始できます。Android 向け Google マップ アプリは複数のインテントをサポートしており、Google マップ アプリを起動して次の 4 つのアクションのいずれかを実行できます。
- 位置とズーム レベルを指定して地図を表示する。
- 位置やスポットを検索し、地図上に表示する。
- ある地点から別の地点への経路を要求する。ルートは、車、徒歩、自転車の 3 つの移動モードで返されます。
- Google ストリートビューにパノラマ画像を表示します。
このページでは、Android 向け Google マップ アプリで使用できるインテントについて説明します。インテントとインテント フィルタ、または Android プラットフォームに共通するインテントの詳細については、Android デベロッパー向けドキュメントをご覧ください。
インテント リクエスト
インテントを指定して Google マップを起動するには、まず Intent
オブジェクトを作成し、そのアクション、URI、パッケージを指定する必要があります。
- アクション: Google マップ インテントはすべて、ビュー アクション(
ACTION_VIEW
)として呼び出されます。 - URI: Google マップ インテントは、目的のアクションと、そのアクションの実行に使用するデータを指定する URL エンコードを使用します。
- パッケージ:
setPackage("com.google.android.apps.maps")
を呼び出すと、Android 向け Google マップ アプリでインテントが処理されます。パッケージが設定されていない場合、Intent
を処理できるアプリがシステムによって決定されます。複数のアプリが利用可能な場合、ユーザーはどのアプリを使用するかを尋ねられることがあります。
Intent
を作成したら、いくつかの方法で、関連するアプリを起動するようシステムにリクエストできます。一般的な方法は、Intent
を startActivity()
メソッドに渡すことです。必要なアプリ(この場合は 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)
インテントに応答できるアプリをシステムが特定できない場合、アプリがクラッシュする可能性があります。このため、これらのインテントのいずれかをユーザーに提示する前に、受信側のアプリがインストールされていることを確認する必要があります。
アプリがインテントを受信できるかどうかを確認するには、Intent
オブジェクトに対して resolveActivity()
を呼び出します。結果が 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, Seattle」という文字列は 1st%20%26%20Pike%2C%20Seattle
になります。文字列内の空白文字は、%20 にエンコードするか、プラス記号(+)に置き換えます。
android.net.Uri
parse()
メソッドを使用して、文字列をエンコードできます。次に例を示します。
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
パラメータ
latitude
とlongitude
は、地図の中心点を設定します。z
は、必要に応じて地図の初期ズームレベルを設定します。指定できる値の範囲は 0(全世界)~ 21(個々の建物)です。上限は、選択した場所の地図データによって異なる場合があります。
例
Java
// Creates an Intent that will load 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 will load 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)
パラメータ
地図の表示に使用するパラメータに加えて、Google 検索では次のパラメータがサポートされています。
q
は、地図上でハイライト表示する場所を定義します。q
パラメータは、すべての検索リクエストで必須です。場所は場所の名前または住所で指定できます。文字列は URL エンコードする必要があります。たとえば、「City Hall, New York, NY」のような住所は「City+Hall,New+York,NY」に変換する必要があります。label
を使用すると、地図上で識別された場所にカスタムラベルを設定できます。label
は文字列として指定する必要があります。
カテゴリ検索
一般的な検索キーワードを渡すと、指定した緯度/経度に近い場所が検索されます。場所が指定されていない場合、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)
クエリ文字列とともにズーム パラメータを指定することで、検索結果にさらにバイアスをかけることができます。以下の例では、ズームレベル 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)
上記の例では、緯度/経度を 0
,0
に設定していますが、住所をクエリ文字列として渡しています。非常に詳細な場所を検索する場合、緯度と経度は必要ありません。ただし、正確な住所がわからない場合は、座標を指定して検索結果にバイアスをかけることができます。たとえば、「Main Street」で住所を検索すると、多くの結果が返されます。
Java
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Kotlin
// Searching for 'Main Street' will return 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=Google+Sydney@-33.8666,151.1957"); 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 examples above
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 examples above
ターンバイターン方式ナビを起動する
このインテントを使用して、指定した住所または座標までのターンバイターン方式のルート案内を提供する Google マップ ナビゲーションを起動します。ルートは常にユーザーの現在地から提示されます。
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
パラメータ
q
: ナビゲーション検索の終了ポイントを設定します。この値は、緯度、経度の座標、またはクエリ形式の住所になります。複数の結果を返すクエリ文字列の場合は、最初の結果が選択されます。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)
通行料金の支払いやフェリーの利用を希望されない場合は、このような事態を避けるために、ルート選択をリクエストできます。
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 ストリートビューは、対象地域全体について、指定された場所からのパノラマビューを提供します。ユーザー提供の 360°写真や、ストリートビューの特別なコレクションも利用できます。
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 を使用します。Android アプリではパノラマ ID をStreetViewPanoramaLocation
オブジェクトから取得できます。cbp
は、カメラの初期の向きを調整するオプションのパラメータです。cbp
パラメータは、カンマ区切りの値を 5 つ受け取ります。値はすべて省略可能です。最も重要な値は 2 番目、4 番目、5 番目の値で、それぞれ方向指定、ズーム、傾斜を設定します。1 番目と 3 番目の値はサポートされていないため、0
に設定する必要があります。bearing
: カメラのコンパス方位を北からの時計回りの度数で示します。真北が 0、東が 90、南が 180、西が 270 です。bearing に渡される値はラップされます。つまり、0°、360°、720° はすべて同じ方向を向いています。bearing は、5 つのカンマ区切り値のうち 2 番目の値として定義されます。zoom
: カメラのズームレベルを設定します。デフォルトのズームレベルは 0 に設定されています。ズームを 1 にすると、倍率は 2 倍になります。ズームは、0 から現在のパノラマの最大ズームレベルまでの範囲内に固定されます。つまり、この範囲外の値は、範囲内の最も近い極値に設定されます。たとえば、-1 は 0 に設定されます。Zoom は、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 will angle 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 will angle 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)