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
用於以下用途: 持續儲存全景位置,或將使用者動作 轉換成街景服務圖像。
panoramaID
和 coordinate
都會儲存為
GMSPanorama
物件。您可以要求 GMSPanorama
GMSPanoramaService
,方法是使用 coordinate
或 panoramaID
。產生的物件將包含兩個中繼資料,以及鄰近全景相片的連結陣列。
設定全景的位置
可根據 座標。
moveNearCoordinate
方法會要求位於座標附近的全景圖。moveNearCoordinate:radius
方法類似,但可將 需要以公尺為單位指定座標周圍的搜尋半徑。moveNearCoordinate:source
方法可讓您指定來源。 如果想要限制街景服務只尋找室外全景,設定來源是個很實用的方法。根據預設,位置的全景為 裡面或外部請注意,室外全景可能不適用於 指定位置。moveNearCoordinate:radius:source
方法可讓您指定 半徑和來源
查看街景視圖圖像
新增街景服務檢視器
用於將觀察者的基本步驟是:
- (一次) 按照入門指南中的步驟取得 SDK, 取得金鑰並新增必要的架構
- 建立或更新
ViewController
。如果全景在 這個檢視區塊控制器會顯示於loadView
方法。 - 使用
GMSPanoramaView
GMSPanoramaView
initWithFrame:
方法。如果這是用作 檢視控制器的唯一檢視,則CGRectZero
可以用作地圖的 frame — 系統會自動調整地圖大小。 - 將
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];
透過網址配置推出街景服務
在 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
物件,並設定
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
上的自訂 CALayer
使用,
GMSPanoramaLayer
。
在街景視圖中的標記
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
。