以上で完了です。

開発を始めるには、デベロッパー ドキュメント をご覧下さい。

Google Maps Android API をアクティベートする

まず初めに Google Developers Console で次の作業を行います。

  1. プロジェクトを作成または選択する
  2. Google Maps Android API をアクティベートする
  3. 適切なキーを作成する
続ける

ストリートビュー

Google ストリートビューは、対象地域全体について、指定した道路からの 360 度のパノラマビューを提供します。

このビデオでは、ストリートビュー サービスを使用して、ユーザーがマップ上の住所を実体験できるようにし、ユーザーの目的地や関心のある場所について意味のある情報を提供する方法を説明しています。

Google Maps Android API v2 の対象地域は、Android 端末の Google マップアプリの対象地域と同じです。

ストリートビューの詳細や、インタラクティブ マップでサポートされる地域については、ストリートビューの仕組みを知るをご覧ください。

StreetViewPanorama クラスは、アプリケーションでストリートビューのパノラマをモデル化します。 アプリケーションの UI 内では、パノラマは StreetViewPanoramaFragment または StreetViewPanoramaView のいずれかのオブジェクトにより表されます。

コードサンプル

GitHub の ApiDemos レポジトリには、ストリートビューの使い方を示したサンプルが含まれています。

Google Maps Android API のストリートビューの概要

Google Maps Android API には、Google ストリートビューで使用される画像を取得および操作するためのストリート ビュー サービスが用意されています。 画像はパノラマとして返されます。

各ストリートビューのパノラマ画像は、1 枚の画像、または単一地点からの 360 度ビューを提供する画像のセットです。 画像は正距円筒図法(Plate Carrée 図法)に準拠し、360 度の水平ビュー(周囲全体)と 180 度の垂直ビュー(真上から真下)を含みます。

生成される 360 度パノラマ画像は、球体上に、その球体の 2 次元表面を包む画像を投影したものです。

StreetViewPanorama では、カメラが中央に配置された、パノラマ画像を球体としてレンダリングするビューアを提供します。 StreetViewPanoramaCamera を操作してズームやカメラの向き(チルトと方向指定)を制御できます。

スタートガイド

スタートガイドに従って、Google Maps Android API プロジェクトをセットアップします。 次に、以下で説明するようにストリートビュー パノラマを追加します。

Google Play サービス SDK クライアント ライブラリには、ストリートビューのサンプルがいくつか含まれています。このサンプルを自分のプロジェクトにインポートして、開発の基礎として使用できます。 サンプルのインポートのガイドラインについては、概要をご覧ください。

API を使用する

次の手順に従って、ストリートビューのパノラマを Android フラグメントに追加します。 これは、アプリケーションにストリートビューを追加する最も単純な方法です。 続けて、フラグメント、ビュー、パノラマのカスタマイズに関する詳細をお読みください。

ストリートビューのパノラマを追加する

概要は次のとおりです。

  1. ストリートビューのパノラマを処理するアクティビティフラグメントオブジェクトを追加します。 最も簡単な方法は、<fragment> 要素を Activity のレイアウト ファイルに追加することです。

  2. OnStreetViewPanoramaReadyCallback インターフェースを実装し、onStreetViewPanoramaReady(StreetViewPanorama) コールバック メソッドを使用して StreetViewPanorama オブジェクトに対するハンドルを取得します。

  3. フラグメントで getStreetViewPanoramaAsync() を呼び出して、コールバックを登録します。

次に、各ステップの詳細を示します。

フラグメントを追加する

<fragment> 要素をアクティビティのレイアウト ファイルに追加して、Fragment オブジェクトを定義します。 この要素で、class 属性を com.google.android.gms.maps.StreetViewPanoramaFragment(または SupportStreetViewPanoramaFragment)に設定します。

次に、レイアウト ファイル内のフラグメントの例を示します。

<fragment
    android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
    android:id="@+id/streetviewpanorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

ストリートビュー コードを追加する

アプリ内でストリートビューのパノラマを操作するには、OnStreetViewPanoramaReadyCallback インターフェースを実装し、StreetViewPanoramaFragment または StreetViewPanoramaView オブジェクトでコールバックのインスタンスを設定する必要があります。

このチュートリアルで StreetViewPanoramaFragment を使用するのは、これがアプリにストリートビューを追加するための最も単純な方法であるためです。

最初のステップは、コールバック インターフェースの実装です。

public class MainActivity extends FragmentActivity
    implements OnStreetViewPanoramaReadyCallback {
...
}

ActivityonCreate() メソッドで、レイアウト ファイルをコンテンツ ビューとして設定します。 たとえば、レイアウト ファイルの名前が main.xml の場合は、次のコードを使用します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
}

FragmentManager.findFragmentById() を呼び出してフラグメントに対するハンドルを取得し、<fragment> 要素のリソース ID をそのハンドルに渡します。

リソース ID R.id.streetviewpanorama が、レイアウト ファイルのビルド時に自動的に Android プロジェクトに追加されることに注意してください。

次に、getStreetViewPanoramaAsync() を使用して、フラグメントにコールバックを設定します。

StreetViewPanoramaFragment streetViewPanoramaFragment =
    (StreetViewPanoramaFragment) getFragmentManager()
        .findFragmentById(R.id.streetviewpanorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

注: getStreetViewPanoramaAsync() はメインスレッドから呼び出す必要があります。コールバックがメインスレッド内で実行されます。 ユーザーの端末に Google Play サービスがインストールされていない場合は、ユーザーが Play サービスをインストールするまで、コールバックはトリガーされません。

onStreetViewPanoramaReady(StreetViewPanorama) コールバック メソッドを使用して、使用準備のできた StreetViewPanorama の null 以外のインスタンスを取得します。

@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
    panorama.setPosition(new LatLng(-33.87365, 151.20689));
}

初期状態の設定の詳細

マップとは異なり、ストリートビューのパノラマは、XML を使用して初期状態を設定することはできません。 ただし、指定したオプションを含む StreetViewPanoramaOptions オブジェクトを渡すことによって、プログラムでパノラマを設定することができます。

mSvpView = new StreetViewPanoramaView(this,
    new StreetViewPanoramaOptions().position(SAN_FRAN));

StreetViewPanoramaFragment の詳細

Android Fragment クラスのサブクラスである StreetViewPanoramaFragment を使用すると、Android フラグメントにストリートビューのパノラマを配置できます。

StreetViewPanoramaFragment オブジェクトはパノラマのコンテナとして機能し、StreetViewPanorama オブジェクトへのアクセスを提供します。

注: StreetViewPanoramaFragment オブジェクトをサポートするために、Google Maps Android API には API レベル 12 以降が必要です。 API レベル 12 より前のアプリケーションを対象としている場合、同じ機能にアクセスするには SupportStreetViewPanoramaFragment クラスを使用します。

Android Support Library も含める必要があります。

注: Google Maps Android API では、1 つのアクティビティで複数の StreetViewPanoramaFragment オブジェクトはサポートされません。

StreetViewPanoramaView

Android View クラスのサブクラスである StreetViewPanoramaView を使用すると、Android View 内にストリートビューのパノラマを配置できます。

View は画面の長方形の領域を表し、Android アプリケーションとウィジェットの基本的な構成要素となるものです。

StreetViewPanoramaFragment と同様に、StreetViewPanoramaView はパノラマのコンテナとして機能し、StreetViewPanorama オブジェクトを通じて中核となる機能を公開します。

このクラスのユーザーはすべてのアクティビティ ライフサイクル メソッド(onCreate()onDestroy()onResume()onPause()) など)を、StreetViewPanoramaView クラスの対応するメソッドに転送する必要があります。

注: Google Maps Android API では、1 つのアクティビティで複数の StreetViewPanoramaView オブジェクトはサポートされません。

ユーザー制御機能をカスタマイズする

デフォルトでは、ユーザーはストリートビューのパノラマを表示するときに、パン、ズーム、隣接するパノラマへの移動の各機能を使用できます。

StreetViewPanorama でメソッドを使用して、ユーザー制御の操作を有効および無効にできます。 操作が無効な場合でも、プログラムによる変更は可能です。

setPanningGesturesEnabled()
ユーザーがドラッグによりカメラの向きを変更できるかどうかを決定します。
      mSvp.setPanningGesturesEnabled(false);
setUserNavigationEnabled()
ユーザーが異なるパノラマに移動できるかどうかを決定します。 ユーザーは、ナビゲーション リンクを 1 回タップするか、ビューをダブルタップして、新しいパノラマに移動できます。
      mSvp.setUserNavigationEnabled(false);
setZoomGesturesEnabled()
ユーザーがピンチ操作によりズームできるかどうかを決定します。
      mSvp.setZoomGesturesEnabled(false);

さらに、ユーザーが市町村を表示できるかどうかも決定できます。

setStreetNamesEnabled()
ユーザーが、地面に示される市町村を表示できるかどうかを決定します。
      mSvp.setStreetNamesEnabled(false);

パノラマの位置を設定する

ストリートビューのパノラマの位置を設定するには、StreetViewPanorama.setPosition() を呼び出して LatLng を渡します。

radius をオプションのパラメータとして渡すこともできます。 radius は、ストリートビューが一致するパノラマを検索する地域を拡大または縮小する場合に役立ちます。 radius が 0 の場合、これは、パノラマが指定された正確な LatLng の位置にリンクされている必要があることを意味します。

デフォルトの radius は 50 です。一致した地域に複数のパノラマがある場合、API は最も一致するものを返します。

private static final LatLng SAN_FRAN = new LatLng(37.765927, -122.449972);
mSvp.setPosition(SAN_FRAN);

または、panoIdStreetViewPanorama.setPosition() に渡して、パノラマ ID に基づいて位置を設定することもできます。

隣接するパノラマのパノラマ ID を取得するには、まず getLocation() を使用して StreetViewPanoramaLocation を取得します。

このオブジェクトには、現在のパノラマの ID と、StreetViewPanoramaLink オブジェクトの配列が含まれます。各オブジェクトに、現在のパノラマと関連付けられているパノラマの ID が含まれます。

StreetViewPanoramaLocation location = mSvp.getLocation();
if (location != null && location.links != null) {
    mSvp.setPosition(location.links[0].panoId);
}

ズームインとズームアウト

StreetViewPanoramaCamera.zoom を設定して、プログラムでズームレベルを変更できます。

ズームを 1.0 に設定すると、画像が 2 倍に拡大されます。

次のスニペットでは、StreetViewPanoramaCamera.Builder() を使用して、既存のカメラと同じチルトと方向指定で、ズームは 50% 拡大する新しいカメラを作成します。

private static final float ZOOM_BY = 0.5f;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom + ZOOM_BY)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .build();

カメラの向き(視点)を設定する

StreetViewPanoramaCamera で方向指定とチルトを設定して、ストリートビューのカメラの向きを決定できます。

bearing
カメラが指している方向。カメラの中心を軸に、真北からの時計回り方向への度数で指定します。 真北が 0、東が 90、南が 180、西が 270 です。
tilt
Y 軸のチルトアップまたはチルトダウン。 範囲は -90 から 0 を経て 90 までです。-90 を指定すると真下を向き、0 は水平に揃えられ、90 では真上を向きます。 差分はカメラの初期デフォルト ピッチを基準に測定されます。多くの場合、初期デフォルト ピッチは水平方向ですが、必ずそうであるとは限りません。 たとえば、山で撮影された画像は、水平ではないデフォルトのピッチで表示されます。

次のスニペットでは、StreetViewPanoramaCamera.Builder() を使用して、既存のカメラと同じズームとチルトで、方向指定を 30 度左に変更した新しいカメラを作成します。

private static final int PAN_BY = 30;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing - PAN_BY)
    .build();

次のスニペットでは、カメラを上方向に 30 度チルトします。

float tilt = mSvp.getPanoramaCamera().tilt + 30;
tilt = (tilt > 90) ? 90 : tilt;

StreetViewPanoramaCamera previous = mSvp.getPanoramaCamera();

StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder(previous)
    .tilt(tilt)
    .build();

カメラの動きにアニメーションを付ける

カメラの動きにアニメーションを付けるには、StreetViewPanorama.animateTo() を呼び出します。

アニメーションは、現在のカメラ属性と新しいカメラ属性の間に挿入されます。 アニメーションなしで直接カメラに移動するには、duration を 0 に設定します。

// Set the tilt to zero, keeping the zoom and bearing at current values.
// Animate over a duration of 500 milliseconds.
long duration = 500;
float tilt = 0;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .tilt(tilt)
    .build();

mSvp.animateTo(camera, duration);

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。