ストリートビュー

プラットフォームを選択: Android iOS JavaScript

Google マップ ストリートビューでは、世界中のさまざまな場所を通りに立った 360 度の画像で探索できます。世界の名所を探索したり、自然の驚異を見たり、ルート案内したり、店の外観を見せたりできます。

概要

Google ストリートビューは、対象地域全体について、指定された道路からの 360 度のパノラマビューを提供します。SDK の対象地域は、iOS 向け Google マップ アプリhttps://maps.google.com/ の対象地域と同じです。ストリートビューの詳細や、インタラクティブな地図でサポートされる地域については、ストリートビューについてをご覧ください。

Maps SDK for iOS には、Google マップのストリートビューで使用される画像を取得して操作するためのストリートビュー サービスが用意されています。ストリートビュー画像はパノラマとして返され、ストリートビュー ビューア(GMSPanoramaView タイプのオブジェクト)内から表示できます。

ストリートビュー パノラマ

各ストリートビューのパノラマ画像は、単一地点からの 360 度ビューを提供する 1 枚の画像または画像のセットです。画像は正距円筒図法(Plate Carrée 図法)に準拠しており、360 度の水平ビュー(周囲全体)と 180 度の垂直ビュー(真上から真下)を含みます。生成される 360 度パノラマ画像は、球体の 2 次元表面を包む画像により、その球体に対する投影を定義します。

ストリートビュー パノラマは、GMSPanoramaView オブジェクトで表示できます。このオブジェクトにより、カメラが中央に配置された、パノラマを球体としてレンダリングするビューアが提供されます。カメラの向きをプログラマティックに制御できるだけでなく、ビューアをカスタマイズする各種プロパティも制御できます。

ストリートビューのデータにアクセスする

ストリートビューのパノラマ画像は、2 つのメタデータのどちらかで特定することができます。

panoramaID
ストリートビュー パノラマの一意の ID。この panoramaID は時間の経過とともに変更される可能性があるため、長期的な参照やハードコードされた参照には適していません。panoramaID は、さまざまなストリートビューの画像にプログラムでアクセスできるようにする場合に最適です。
coordinate
この画像の正確な位置。CLLocationCoordinate2D で表します。coordinate は、パノラマの位置を永続的に保存したり、地図上でのユーザー アクションをストリートビュー画像に変換したりするために使用します。

panoramaIDcoordinate はどちらも GMSPanorama オブジェクトのプロパティとして保存されます。GMSPanoramaService から GMSPanorama をリクエストするには、coordinate または panoramaID を使用します。結果として得られるオブジェクトには、両方のメタデータと、付近のパノラマ画像へのリンクの配列が含まれます。

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

ストリートビュー パノラマの位置は、座標に基づいて設定できます。

  • moveNearCoordinate メソッドは、その座標付近のパノラマをリクエストします。

  • moveNearCoordinate:radius メソッドも同様ですが、座標を中心とした検索半径をメートル単位で指定できます。

  • moveNearCoordinate:source メソッドを使用するとソースを指定できます。source は、ストリートビューの検索を屋外のパノラマのみに制限する場合に役立ちます。デフォルトでは、各場所のパノラマは屋内または屋外のいずれかになります。指定された場所の屋外のパノラマが存在しない場合があります。

  • moveNearCoordinate:radius:source メソッドを使用すると、半径とソースの両方を指定できます。

ストリートビュー画像の表示

ストリートビューのビューアを追加する

ビューアを追加するための基本的なステップは次のとおりです。

  1. (1 回)スタートガイドの手順に沿って SDK を入手し、キーを取得して、必要なフレームワークを追加します。
  2. ViewController を作成または更新します。このビュー コントローラが表示されたときにパノラマが表示される場合は、必ず loadView メソッド内でパノラマを作成してください。
  3. GMSPanoramaView initWithFrame: メソッドを使用して、GMSPanoramaView クラスを作成してインスタンス化します。これをビュー コントローラの唯一のビューとして使用する場合は、CGRectZero を地図のフレームとして使用できます。これにより、地図のサイズが自動的に変更されます。
  4. GMSPanoramaView オブジェクトをビュー コントローラのビューとして設定します(例: self.view = panoView;)。
  5. ストリートビュー画像の場所は、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 オブジェクトを変更し、GMSPanoramaViewcamera プロパティに設定します。これにより、アニメーションなしで、カメラが新しい視点にスナップされます。GMSCameraPosition を作成すれば、画面の向きとズームを任意に組み合わせて設定できます。

Swift

panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
      

Objective-C

panoView.camera = [GMSPanoramaCamera cameraWithHeading:180
                                                 pitch:-10
                                                  zoom:1];
      

遷移をアニメーション化するには、GMSPanoramaViewanimateToCamera:animationDuration: メソッドを呼び出します。さらに、Core Animation を使ってカメラをコントロールすることもできます。これは、GMSPanoramaViewGMSPanoramaLayer のカスタム CALayer を介して使用できます。

ストリートビュー内のマーカー

GMSPanoramaView オブジェクトを使用すると、地図上のマーカーを表示できます。GMSMapView オブジェクトと GMSPanoramaView オブジェクトのどちらでも、対応するプロパティを設定することで、同じ GMSMarker オブジェクトを使用できます。

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 のメソッドの一覧をご覧ください。