街景服務

選取平台: Android iOS JavaScript

Google 地圖街景服務提供 360 度街景圖像,讓您探索世界各個角落。您可以探索世界的地標、查看自然擁護者、導航行程,或展示商家外面。

總覽

使用 Google 街景服務可在指定道路的涵蓋區域,進行 360 度全景檢視。透過 SDK 提供的涵蓋範圍與 iOS 版 Google 地圖應用程式https://maps.google.com/ 相同。如要進一步瞭解街景服務並在互動式地圖上查看支援區域,請參考「關於街景服務」。

Maps SDK for iOS 提供街景服務,以取得及處理在 Google 地圖街景服務中使用的圖像。街景服務圖片會傳回全景,並從街景服務檢視器 (GMSPanoramaView 類型的物件) 中查看。

街景服務全景

每個街景服務全景都由一或多張圖片組成,提供單一位置完整的 360 度環景。圖片符合等距長方形投影,包含 360 度的水平視圖 (完整的環景) 與 180 度的垂直視圖 (由正上方到正下方)。產生的 360 度全景會定義球體投影,圖片會呈現至該球面的 2D 表面。

街景服務全景可透過 GMSPanoramaView 物件查看。這個物件提供的檢視器會將全景算繪為球體,相機則位於其中央。您可以透過程式輔助方式控制攝影機方向,以及透過多種屬性自訂檢視器。

存取街景服務資料

街道視圖全景圖被確定了兩件的元數據中的一個:

panoramaID
街景服務全景的專屬 ID。此 panoramaID 可能會隨時間改變,而且並不適合長期或硬式編碼的參考。panoramaID 最適合用來提供程式輔助,以程式輔助方式存取不同的街景服務圖片。
coordinate
這張圖片的精確位置,以 CLLocationCoordinate2D 表示。使用 coordinate 保存全景位置的永久儲存空間,或是將地圖上的使用者動作轉換為街景服務圖片。

panoramaIDcoordinate 都會儲存為 GMSPanorama 物件的屬性。您可以使用 coordinatepanoramaIDGMSPanoramaService 要求 GMSPanorama。產生的物件會包含兩組中繼資料,以及鄰近全景的連結陣列。

設定全景的位置

街景服務全景的位置可以根據座標設定。

  • moveNearCoordinate 方法會要求座標附近的全景。

  • moveNearCoordinate:radius 方法很類似,但可讓您指定座標附近的搜尋半徑 (以公尺為單位)。

  • moveNearCoordinate:source 方法可讓您指定來源。如果想要限制街景服務只尋找室外全景,設定來源是個很實用的方法。根據預設,地點的全景位於內部或室外。請注意,室外全景可能不適用於特定位置。

  • moveNearCoordinate:radius:source 方法可讓您同時指定半徑和來源。

查看街景視圖圖像

新增街景服務檢視器

用於將觀察者的基本步驟是:

  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
指出使用者能否變更要顯示哪些全景。使用者只要輕觸一下導覽連結,或輕觸兩下檢視畫面,即可將全景設為 NO 以停用導航變更。

您可以使用 setAllGesturesEnabled: 方法一次啟用或停用所有手勢。

Swift

panoView.setAllGesturesEnabled(false)
      

Objective-C

[panoView setAllGesturesEnabled:NO];
      

使用網址配置推出街景服務

Google 街景服務圖像可在 iOS 版 Google 地圖應用程式內查看。您可以將 mapmode 參數設為 streetview,以使用 comgooglemaps 網址配置,以街景服務模式啟動 iOS 版 Google 地圖應用程式。下方是將推出街景服務的網址範例。詳情請參閱「網址配置」說明文件。

comgooglemaps://?center=46.414382,10.013988&mapmode=streetview

街景服務位置和視角

GMSPanoramaCamera 可讓您將街景服務相機的視角設為方向、傾斜和縮放的組合。

下面的代碼片段集將定向攝像頭向南,並稍微向下。

Swift

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

Objective-C

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

方向

街景服務位置會定義圖片中相機焦點的位置,但不會定義圖片中相機的方向。為瞭解決這個問題,GMSOrientation 物件會定義兩個屬性:

  • heading 會以正北為基準,定義相機擺放位置的旋轉角度 (以度為單位)。方向依順時針測量: 正北為 0,東方是 90,正南是 180,正西是 270。
  • pitch (預設為 0) 定義相機初始預設傾斜角度的「向上」或「向下」變異量,預設傾斜角度通常 (但不一定) 是水平(例如,在山上拍攝的圖片中,預設傾斜角度可能就不是水平)。傾斜角度的測量方式為正值朝上 (垂直向上 +90 度,並與預設傾斜角度相距 +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: 方法,為轉場效果製作動畫。此外,您可以使用控制核心動畫的相機。這項資訊可透過 GMSPanoramaViewGMSPanoramaLayer 上的自訂 CALayer 取得。

在街景視圖中的標記

GMSPanoramaView 物件可顯示地圖標記。您可以透過設定其對應的屬性,在 GMSMapViewGMSPanoramaView 物件上使用同一個 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 中的方法清單。