您已全部設定完成!

若要開始開發,請參閱我們的開發人員文件

啟用 Google Maps SDK for iOS

為協助您開始,我們將先引導您使用 Google Developers Console 來執行一些動作:

  1. 建立或選擇專案
  2. 啟用 Google Maps SDK for iOS
  3. 建立適當的金鑰
繼續

街景服務

「Google 地圖」的「街景服務」能讓您透過 360 度的街道影像,探索位於世界各地的地點。 您可以探索世界上的地標、觀看壯麗的自然風景、預先瀏覽旅程,或展示您店面的外觀。

總覽

「Google 街景服務」提供指定道路整個涵蓋區域的 360 度全景檢視。 透過 SDK 所取得的涵蓋範圍,與 Google Maps for iOS 應用程式https://maps.google.com/ 相同。

您可以在關於街景服務閱讀更多有關「街景服務」的資訊,並在互動式地圖上查看支援的區域。

Google Maps SDK for iOS 提供「街景服務」服務,用來取得和操作「Google 地圖」的「街景服務」中使用的影像。 「街景服務」影像將會以全景傳回,而且可以從「街景服務」檢視器中檢視 — 類型為 GMSPanoramaView 的物件。

「街景服務」全景

每個「街景服務」全景都是一個或一組影像,可提供單一位置的完整 360 度檢視。 影像遵循等距圓柱 (Plate Carrée) 投影法,並包含 360 度的水平檢視(全方位環繞)與 180 度垂直檢視(垂直上下)。

產生的 360 度全景會在球體上定義投影,並將影像包覆至該球體的二維表面上。

「街景服務」全景可透過 GMSPanoramaView 物件檢視。 此物件能提供一個可將全景轉譯為球體的檢視器,而相機將位於球體的正中間。

您可以用程式設計方式來控制相機的方向,以及數個可以自訂檢視器的屬性。

存取「街景服務」資料

「街景服務」全景是由兩個中繼資料的其中一個來辨識:

panoramaID
「街景服務」全景的唯一 ID。 panoramaID 可能會隨時間變更,並不適用於長期或硬式編碼的參照。 panoramaID 最適合用來提供對不同「街景服務」影像的程式設計存取。 注意:目前並不支援 Innerspace 與 Photo Sphere 全景。
coordinate
此影像的精確位置(以 CLLocationCoordinate2D 表示)。 使用 coordinate 以取得全景位置的永久儲存空間,或是將使用者在地圖上的動作轉譯為「街景服務」影像。

panoramaIDcoordinate 都是以 GMSPanorama 物件屬性的形式儲存。 您可以使用 coordinatepanoramaIDGMSPanoramaService 要求 GMSPanorama。 產生的結果物件將會同時包括上述兩種中繼資料,以及附近全景的連結陣列。

檢視「街景服務」影像

新增「街景服務」檢視器

新增檢視器的基本步驟如下:

  1. (僅需執行一次) 依照入門中的步驟執行以取得 SDK、取得金鑰,並新增必要的架構。

  2. 建立或更新 ViewController。 如果全景會在此檢視控制器可見時顯示,請務必將它建立於 loadView 方法內。

  3. 使用 GMSPanoramaView initWithFrame: 方法建立並實例化 GMSPanoramaView 類別。 如果要將此用於僅限檢視控制器的檢視,則 CGRectZero 便可以做為地圖的邊框使用 — 地圖將會自動調整大小。

  4. GMSPanoramaView 物件設定為檢視控制器的檢視,例如: self.view = panoView;

  5. 使用例如 moveNearCoordinate: 的方法設定「街景服務」影像的位置。

下列範例會將「街景服務」檢視器新增至應用程式。

Swift

import UIKit
import GoogleMaps

class ViewController:UIViewController, GMSMapViewDelegate {

  override func loadView() {
    let panoView = GMSPanoramaView(frame: .zero)
    self.view = panoView

    panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude:150.312))
  }
}

Objective-C

#import "ViewController.h"
@import GoogleMaps;

@implementation ViewController

- (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: 方法來同時啟用或停用所有手勢。

[panoView_ setAllGesturesEnabled:NO];

使用 URL 配置啟動「街景服務」

「Google 街景服務」影像可以從 Google Maps for iOS 應用程式中檢視。 您可以將 mapmode 參數設定為 streetview,來透過 comgooglemaps URL 配置以「街景服務」模式啟動 Google Maps for iOS 應用程式。

下列為可以啟動「街景服務」的 URL 範例。 如需詳細資訊,請參閱 URL 配置文件。

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

「街景服務」的位置和視角 (POV)

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

下列片段將會把相機的方向設定為朝向南方,並稍微向下。

Swift

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

Objective-C

GMSPanoramaView *panoView = [[GMSPanoramaView alloc] initWithFrame:CGRectZero];
panoView_.camera = [GMSPanoramaCamera cameraWithHeading:180
                                                  pitch:-10
                                                   zoom:1];

方向

「街景服務」位置可定義影像上相機焦點的放置,但是不會定義該影像上相機的方向。

針對該目的,GMSOrientation 物件將定義兩個屬性:

  • heading 使用從正北方算起的相對角度定義相機焦點的旋轉角度。 方向是以順時針方向計算: 0 為正北方、90 為東方、180 為南方、270 為西方。
  • pitch (預設為 0)定義從相機的初始預設傾斜「往上」或「往下」的角度變化,通常是(但不總是)平面水平。

(例如,在山丘上拍到的影像可能會展示不是水平視角的預設傾斜)。 傾斜角度的測量是往上仰視為正值(與預設傾斜呈垂直向上的 +90 度),往下俯視為負值(與預設傾斜呈垂直向下的 -90 度)。

縮放

「街景服務」透過縮放支援不同層級的影像詳細資料。 您可以透過程式設計方式來設定縮放層級,使用者也可以透過在檢視器中捏合來變更縮放層級。

移動相機

一旦建立 GMSPanoramaView,且它擁有已設定或預設的相機,您便可以使用數種方式來變更它。 當您變更相機時,您可以選擇將相機移動結果動畫化。 動畫將會在目前的相機屬性和新的相機屬性之間進行內插計算。

您可以修改 GMSPanoramaCamera 物件,並將它設定在 GMSPanoramaViewcamera 屬性上。 這會在沒有動畫的情況下,將相機貼齊至新的視角。 可以建立 GMSCameraPosition 以設定任何方向與縮放的組合。

Swift

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

Objective-C

GMSPanoramaView *panoView = [[GMSPanoramaView alloc] initWithFrame:CGRectZero];
panoView.camera = [GMSPanoramaCamera cameraWithHeading:180 pitch:-10 zoom:1];

您可以透過呼叫 GMSPanoramaViewanimateToCamera:animationDuration: 方法,以對轉換進行動畫化。

此外,您可以使用 Core Animation 來控制相機。 這是透過 GMSPanoramaView 上的自訂 CALayer (GMSPanoramaLayer)提供。

「街景服務」內的標記

GMSPanoramaView 物件能夠顯示地圖標記。 如果要在 GMSMarkerGMSPanoramaView 物件上使用相同的 GMSMapView 物件,請設定它的對應屬性:

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 位置之間距離而縮放大小。 如果距離太長,將會使標記變得太小而無法顯示,並進而從檢視中隱藏。

注意:並非所有標記功能都可以在使用 GMSPanoramaView 時使用。

panoramaView 屬性設定為 nil 以將它從 GMSPanoramaView 移除。

Swift

marker.panoramaView = nil

Objective-C

marker.panoramaView = nil;

事件

您可以監聽於「街景服務」全景上發生的事件(例如當使用者點選全景時)。 如果要監聽事件,您必須實作 GMSPanoramaViewDelegate 通訊協定。 請參閱整體事件指南GMSPanoramaViewDelegate 上的方法清單。

傳送您對下列選項的寶貴意見...

這個網頁
Google Maps SDK for iOS
Google Maps SDK for iOS
需要協助嗎?請前往我們的支援網頁