Google マップのストリートビューでは、ストリート ビューを 360 度見渡して、世界中のさまざまな場所を探索できます。世界のランドマークの探索、自然の散策、ルートの案内、店舗の外観の表示ができます。
概要
Google ストリートビューは、対象地域全体について、指定された道路からの 360 度のパノラマビューを提供します。SDK を通じて利用可能なカバレッジは、iOS 向け Google マップ アプリまたは https://maps.google.com/
のカバレッジと同じです。ストリートビューの詳細や、インタラクティブな地図でサポートされているエリアについては、ストリートビューについてをご覧ください。
Maps SDK for iOS には、Google マップ ストリートビューで使用される画像を取得および操作するためのストリートビュー サービスが用意されています。ストリートビュー画像はパノラマとして返され、ストリートビュー ビューア(GMSPanoramaView
タイプのオブジェクト)から表示されます。
ストリートビュー パノラマ
各ストリートビューのパノラマ画像は、単一地点からの 360 度ビューを提供する 1 枚の画像または画像のセットです。画像は正距円筒図法(プレート カレー)に沿って、360 度の水平ビュー(周囲全体)と 180 度の垂直ビュー(真上から真下)で表示されます。作成した 360 度パノラマ画像は、球面上の 2 次元表面に画像をラップした球面上の投影を定義します。
ストリートビュー パノラマは、GMSPanoramaView
オブジェクトで表示できます。このオブジェクトは、カメラを中心とする球体としてパノラマをレンダリングするビューアを提供します。カメラの向きや、ビューアをカスタマイズするプロパティは、プログラムで制御できます。
ストリートビュー データにアクセスする
ストリートビューのパノラマ画像は、2 つのメタデータのどちらかで特定することができます。
panoramaID
- ストリートビュー パノラマの一意の ID です。この
panoramaID
は時間の経過とともに変化する可能性があり、長期的またはハードコードされた参照としては適していません。panoramaID
は、異なるストリートビュー画像にプログラムでアクセスできるようにする場合に最適です。 coordinate
- この画像の正確な位置(
CLLocationCoordinate2D
として表現)。coordinate
を使用すると、パノラマの位置を永続的に保存できます。また、地図上でのユーザー アクションをストリートビュー画像に変換することもできます。
panoramaID
と coordinate
はどちらも GMSPanorama
オブジェクトのプロパティとして保存されます。coordinate
または panoramaID
を使用して、GMSPanoramaService
から GMSPanorama
をリクエストできます。作成されたオブジェクトには、メタデータと、周辺のパノラマへのリンクの配列の両方が含まれます。
パノラマの位置を設定する
ストリートビュー パノラマの位置は、座標に基づいて設定できます。
moveNearCoordinate
メソッドは、座標付近のパノラマをリクエストします。moveNearCoordinate:radius
メソッドも同様ですが、座標の周りの検索範囲をメートル単位で指定できます。moveNearCoordinate:source
メソッドを使用して、ソースを指定できます。source は、ストリートビューの検索を屋外のパノラマのみに制限する場合に役立ちます。デフォルトでは、場所のパノラマは内側か外側のいずれかになります。指定された場所の屋外パノラマが存在しない可能性があります。moveNearCoordinate:radius:source
メソッドを使用すると、半径とソースの両方を指定できます。
ストリートビュー画像の表示
ストリートビュー ビューアを追加する
ビューアを追加するための基本的なステップは次のとおりです。
- (1 回のみ)スタートガイドの手順に沿って SDK を入手し、キーを取得して必要なフレームワークを追加します。
ViewController
を作成または更新します。このビュー コントローラが表示されたときにパノラマを表示する場合は、必ずloadView
メソッド内でパノラマを作成してください。GMSPanoramaView
initWithFrame:
メソッドを使用して、GMSPanoramaView
クラスを作成してインスタンス化します。これをビュー コントローラの唯一のビューとして使用する場合は、CGRectZero
を地図のフレームとして使用できます。地図は自動的にサイズ変更されます。- ビュー コントローラのビューとして
GMSPanoramaView
オブジェクトを設定します(例:self.view = panoView;
)。 - ストリートビュー画像の位置を設定するには、
moveNearCoordinate:
などのメソッドを使用します。
次の例では、アプリにストリートビュー ビューアを追加しています。
Swift
import GoogleMaps class StreetView: UIViewController { override func loadView() { let panoView = GMSPanoramaView(frame: .zero) self.view = panoView panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312)) } }
Objective-C
#import "StreetView.h" @import GoogleMaps; @interface StreetView () @end @implementation StreetView - (void)loadView { GMSPanoramaView *panoView = [[GMSPanoramaView alloc] initWithFrame:CGRectZero]; self.view = panoView; [panoView moveNearCoordinate:CLLocationCoordinate2DMake(-33.732, 150.312)]; } @end
ビューアのカスタマイズ
利用できる操作を制限して、ビューアをカスタマイズできます。デフォルトでは、パン、ズーム、隣接するパノラマへの移動がすべて有効になっています。個々のジェスチャーは、GMSPanoramaView
のプロパティで制御されます。これらのプロパティにより、ユーザー制御の操作が有効または無効になります。操作が無効な場合でも、プログラムによる変更は可能です。
orientationGestures
- ユーザーがタップまたはドラッグでカメラの向きを変更できるかどうかを指定します。カメラの向きの変更を無効にするには、
NO
に設定します。 zoomGestures
- ユーザーがピンチ操作でズームできるかどうかを指定します。ズームを無効にするには、
NO
に設定します。 navigationGestures
- 表示するパノラマをユーザーが変更できるかどうか。ユーザーは、ナビゲーション リンクを 1 回タップするか、ビューをダブルタップしてパノラマを変更できます。
NO
に設定すると、ナビゲーションの変更が無効になります。
setAllGesturesEnabled:
メソッドを使用して、すべてのジェスチャーを一度に有効または無効にできます。
Swift
panoView.setAllGesturesEnabled(false)
Objective-C
[panoView setAllGesturesEnabled:NO];
URL スキームを使用したストリートビューのリリース
Google ストリートビュー画像は、iOS 向け Google マップ アプリ内から表示できます。comgooglemaps
URL スキームを使用して iOS 向け Google マップ アプリケーションをストリートビュー モードで起動するには、mapmode
パラメータを streetview
に設定します。ストリートビューを起動する URL の例を以下に示します。詳細については、URL スキームのドキュメントをご覧ください。
comgooglemaps://?center=46.414382,10.013988&mapmode=streetview
ストリートビューの位置情報と視点(POV)
GMSPanoramaCamera
を使用すると、方向、ピッチ、ズームを組み合わせてストリートビュー カメラの画角を設定できます。
次のスニペットは、カメラの方向を南向きにし、わずかに下を向けています。
Swift
panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
Objective-C
panoView.camera = [GMSPanoramaCamera cameraWithHeading:180 pitch:-10 zoom:1];
向き
ストリートビューでの位置情報は、どの画像にカメラを向けるかを定義しますが、その画像でのカメラの向きは定義しません。向きを示すため、GMSOrientation
オブジェクトでは 2 つのプロパティを定義します。
heading
は、カメラ中心の回転角度を、真北からの相対角度で定義します。方向は、時計回りで測定します。真北は 0、東は 90、南は 180、西は 270 です。pitch
(デフォルトは0
)は、カメラの初期デフォルト ピッチからの「上」または「下」向きの角度を定義します。通常は水平です(常に水平とは限りません)。(たとえば、山で撮影された画像は、水平ではないデフォルトの初期ピッチで表示される場合があります)。ピッチ角度は、見上げる方向を正の値(デフォルトのピッチと直行する真上方向が +90 度)で、下を向く方向を負の値(デフォルトのピッチと直交する真下の方向が -90 度)として計測します。
Zoom
ストリートビューでは、ズームを使用してさまざまなレベルの画像の詳細を処理できます。 ズームレベルをプログラムで設定したり、ピンチしてズームによってビューアのレベルを変更したりできます。
カメラの移動
GMSPanoramaView
を作成し、設定済みのカメラまたはデフォルトのカメラを設定したら、次のいずれかの方法で変更できます。カメラを変更する場合、結果として生じるカメラの動きをアニメーション化することができます。アニメーションは、現在のカメラ属性と新しいカメラ属性の間で補間されます。
GMSPanoramaCamera
オブジェクトを変更し、GMSPanoramaView
の camera
プロパティにそれを設定できます。これにより、アニメーションなしで、新しい視点にカメラがスナップされます。GMSCameraPosition
は、向きとズームの任意の組み合わせで構成できます。
Swift
panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
Objective-C
panoView.camera = [GMSPanoramaCamera cameraWithHeading:180 pitch:-10 zoom:1];
遷移をアニメーション化するには、GMSPanoramaView
の animateToCamera:animationDuration:
メソッドを呼び出します。さらに、Core Animation を使ってカメラをコントロールすることもできます。これは、GMSPanoramaView
、GMSPanoramaLayer
のカスタム CALayer
を介して利用できます。
ストリートビュー内のマーカー
GMSPanoramaView
オブジェクトは地図のマーカーを表示できます。対応する GMSMarker
プロパティは、対応するプロパティを設定することで、GMSMapView
オブジェクトまたは GMSPanoramaView
オブジェクトに対して使用できます。
Swift
// Create a marker at the Eiffel Tower let position = CLLocationCoordinate2D(latitude: 48.858, longitude: 2.294) let marker = GMSMarker(position: position) // Add the marker to a GMSPanoramaView object named panoView marker.panoramaView = panoView // Add the marker to a GMSMapView object named mapView marker.map = mapView
Objective-C
// Create a marker at the Eiffel Tower CLLocationCoordinate2D position = CLLocationCoordinate2DMake(48.858,2.294); GMSMarker *marker = [GMSMarker markerWithPosition:position]; // Add the marker to a GMSPanoramaView object named panoView marker.panoramaView = panoView; // Add the marker to a GMSMapView object named mapView marker.map = mapView;
マーカーのサイズは、マーカーの位置と GMSCameraView
の位置との距離の関数に応じて調整されます。この距離が大きすぎると、マーカーが小さすぎて表示されなくなります。
panoramaView
プロパティを nil
に設定して、GMSPanoramaView
から削除します。
Swift
marker.panoramaView = nil
Objective-C
marker.panoramaView = nil;
イベント
ストリートビュー パノラマで発生するイベント(ユーザーがパノラマをタップしたときなど)をリッスンできます。イベントをリッスンするには、GMSPanoramaViewDelegate
プロトコルを実装する必要があります。一般的なイベントガイドと GMSPanoramaViewDelegate
のメソッドの一覧をご覧ください。