Google 地圖街景服務可讓您以 360 度的街景圖像探索世界各地的地點。您可以探索世界地標、查看自然奇觀、遊覽行程或顯示商家外部資訊。
總覽
Google 街景服務可讓您在指定道路的涵蓋區域進行 360 度全景檢視。透過 SDK 提供的涵蓋範圍,與 Google 地圖 iOS 版應用程式或 https://maps.google.com/
的涵蓋範圍相同。如要進一步瞭解街景服務並在互動式地圖上查看支援區域,請參閱街景服務網站上的簡介。
Maps SDK for iOS 提供街景服務,以便取得及操控在 Google 地圖街景服務中使用的圖像。
街景服務圖片會以全景形式傳回,並可透過街景服務檢視器 (類型為 GMSPanoramaView
的物件) 檢視。
街景服務全景圖
每個街景服務全景都由一或多張圖片組成,提供單一位置完整的 360 度環景。圖片符合等距長方形投影,包含 360 度的水平視圖 (完整的環景) 與 180 度的垂直視圖 (由正上方到正下方)。產生的 360 度全景相片會定義球上的投影,圖片會包裝在球體的二維表面上。
街景服務全景可使用 GMSPanoramaView
物件進行檢視。這個物件提供的檢視器會將全景算繪為球體,相機則位於其中央。您可以透過程式控制相機的方向,以及透過自訂多個屬性來自訂檢視器。
存取街景服務資料
街道視圖全景圖被確定了兩件的元數據中的一個:
panoramaID
- 街景服務全景的專屬 ID。此
panoramaID
可能會隨時間改變,不適合長期下來或以硬式編碼方式參照。panoramaID
最適合用來提供程式輔助存取權給各種街景服務圖片。 coordinate
- 這個圖像的精確位置,以
CLLocationCoordinate2D
表示。使用coordinate
永久儲存全景位置,或將使用者動作進行地圖轉譯成街景服務圖片。
panoramaID
和 coordinate
都會儲存為 GMSPanorama
物件的屬性。您可以使用 coordinate
或 panoramaID
向 GMSPanoramaService
要求 GMSPanorama
。產生的物件會包含兩個中繼資料,以及鄰近全景的一系列連結。
設定全景的位置
街景服務全景的位置可根據座標設定。
moveNearCoordinate
方法會要求座標附近的全景。moveNearCoordinate:radius
方法相似,但可讓您指定座標周圍的搜尋半徑 (公尺)。moveNearCoordinate:source
方法可讓您指定來源。如果想要限制街景服務只尋找室外全景,設定來源是個很實用的方法。根據預設,地點的全景圖位於內部或外部。請注意,室外全景可能不適用於特定位置。moveNearCoordinate:radius:source
方法可讓您指定半徑和來源。
查看街景視圖圖像
新增街景服務檢視器
用於將觀察者的基本步驟是:
- (一次) 請按照入門指南中的步驟取得 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
- 使用者是否能夠變更要顯示的全景。使用者只要輕觸一下導覽連結,或輕觸兩下視圖,即可將全景圖設為
NO
,即可停用導航變更。
您可以使用 setAllGesturesEnabled:
方法一次啟用或停用所有手勢。
Swift
panoView.setAllGesturesEnabled(false)
Objective-C
[panoView setAllGesturesEnabled:NO];
以 URL 配置啟動街景服務
您可在 Google Maps iOS 版應用程式中檢視 Google 街景服務圖像。只要將 mapmode
參數設為 streetview
,即可在街景服務模式中,使用 comgooglemaps
網址配置來啟動 Google 地圖 iOS 版應用程式。將提供啟動街景服務網址的網址範例如下。詳情請參閱網址配置說明文件。
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
物件定義了兩個屬性:
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:
方法,為轉換加入動畫效果。此外,您可以使用控制核心動畫的相機。這項功能可透過 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
中的方法清單。