街景服務

選取平台: Android iOS JavaScript

Google 地圖街景服務可讓你透過 360 度街景圖像。你可以探索世界地標,欣賞自然美景 發掘行程、規劃行程,或呈現商家外部實景。

總覽

使用 Google 街景服務可在指定道路的涵蓋區域,進行 360 度全景檢視。SDK 提供的涵蓋率是 iOS 版 Google 地圖應用程式https://maps.google.com/。如要進一步瞭解 街景服務並在互動式地圖上查看支援區域,網址為 關於街景服務

Maps SDK for iOS 提供街景服務,可取得及操控 Google 地圖街景服務中使用的圖像。街景服務圖片會以全景形式傳回, 透過街景服務檢視器查看, GMSPanoramaView 類型的物件。

街景服務全景

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

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

存取街景服務資料

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

panoramaID
街景服務全景的專屬 ID。此panoramaID 可能隨時間改變,而且不適合長期或硬式編碼 參照。panoramaID 最適合用於提供 以程式輔助方式存取不同的街景服務圖像。
coordinate
這張圖片的確切位置,以 CLLocationCoordinate2D。將 coordinate 用於以下用途: 持續儲存全景位置,或將使用者動作 轉換成街景服務圖像。

panoramaIDcoordinate 都會儲存為 GMSPanorama 物件。您可以要求 GMSPanorama GMSPanoramaService,方法是使用 coordinatepanoramaID。產生的物件將包含兩個中繼資料,以及鄰近全景相片的連結陣列。

設定全景的位置

可根據 座標。

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

  • moveNearCoordinate:radius 方法類似,但可將 需要以公尺為單位指定座標周圍的搜尋半徑。

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

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

查看街景視圖圖像

新增街景服務檢視器

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

  1. (一次) 按照入門指南中的步驟取得 SDK, 取得金鑰並新增必要的架構
  2. 建立或更新 ViewController。如果全景在 這個檢視區塊控制器會顯示於 loadView 方法。
  3. 使用GMSPanoramaView GMSPanoramaView initWithFrame: 方法。如果這是用作 檢視控制器的唯一檢視,則 CGRectZero 可以用作地圖的 frame — 系統會自動調整地圖大小。
  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];
      

透過網址配置推出街景服務

在 iOS 版 Google 地圖中,可以看到 Google 街景服務圖像 應用程式。你可以在街道啟動 Google 地圖 iOS 版應用程式 透過 comgooglemaps 網址配置設定 mapmode 的檢視模式 參數套用至 streetview。預計啟動街景服務的網址範例 。詳情請參閱「網址配置方案」說明文件。

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 度) 垂直向下傾斜,嵌入至預設傾斜角度)。

縮放

街景服務可透過使用變焦功能,支援不同等級的圖片細節。 您可以透過程式輔助的方式設定縮放等級,或是讓使用者自行調整 透過雙指撥動縮放檢視器

移動攝影機

建立 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: 方法。 此外,您可以使用控制核心動畫的相機。為此 可透過 GMSPanoramaView 上的自訂 CALayer 使用, GMSPanoramaLayer

在街景視圖中的標記

GMSPanoramaView 物件可顯示地圖標記。您可以使用 GMSMarker 物件 (GMSMapViewGMSPanoramaView 物件,方法是設定其對應的屬性:

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