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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android 向け Google マップ アプリでは、ディスプレイ、検索、ナビゲーション、ストリートビューの各モードで Google マップを起動する際に使用できるインテントがいくつか公開されています。アプリに地図を埋め込む場合は、Google Maps Android API のスタートガイドをご覧ください。

概要

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

  1. 位置とズーム レベルを指定して地図を表示する。
  2. 位置やスポットを検索し、地図上に表示する。
  3. ある地点から別の地点への経路を要求する。ルートは、車、徒歩、自転車の 3 種類の移動手段で返されます。
  4. Google ストリートビューにパノラマ画像を表示する。

このページでは、Android 向け Google マップ アプリで使用できるインテントについて説明します。インテントとインテント フィルタ、または Android プラットフォームに共通するインテントの詳細については、Android デベロッパー向けドキュメントをご覧ください。

インテント リクエスト

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

  • アクション: Google マップのすべてのインテントは、ビュー アクション ACTION_VIEW として呼び出されます。
  • URI: Google マップのインテントでは、目的のアクションを指定する URL エンコードと、アクションを実行するデータを使用します。
  • パッケージ: 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)

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

アプリがインテントを受信できることを確認するには、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 & amp; 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

パラメータ

  • latitudelongitude は、地図の中心点を設定します。
  • 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)

パラメータ

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

  • q は、地図上でハイライト表示する場所を定義します。q パラメータは、すべての検索リクエストに必要です。地名または住所として位置情報を受け付けます。文字列は URL エンコードされます。したがって、「ニューヨーク市の市町村」のような住所は「ニューヨーク市+都市」に変換する必要があります。

  • 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)

サンフランシスコのレストランを検索

クエリ文字列とともにズーム パラメータを指定することで、検索結果をさらにバイアスできます。次の例では、ズームレベル 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' 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 が lat/lng 座標として指定されている場合にのみ使用できます。

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 は、ルートで回避すべき機能を設定します。回避は省略可能で、次のいずれか 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 です。panoidcbll の両方が指定されている場合、Google マップはパノラマ ID を使用します。パノラマ ID は、Android アプリの StreetViewPanoramaLocation オブジェクトから利用できます。

  • cbp は、カメラの初期向きを調整するオプションのパラメータです。cbp パラメータは 5 つのカンマ区切り値を使用します。これらの値は任意です。最も重要な値は、向き、ズーム、傾斜を設定する 2 番目、4 番目、5 番目の値です。最初と 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)

ストリートビューのピラミッド