
借助 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方法中创建该全景图片。 - 使用
GMSPanoramaViewinitWithFrame:方法创建并实例化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];
使用网址架构启动街景
您可以在 Google 地图 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 度,表示垂直向下,与默认倾斜度正交)。
缩放
街景支持利用缩放显示细节程度不同的图像。 您可以通过编程方式设置缩放级别,也可以让用户在查看器中通过双指张合来更改级别。
移动镜头
创建 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: 方法来为过渡添加动画效果。
另外,您也可以利用 Core Animation 控制镜头。这可以通过 GMSPanoramaView 上的自定义 CALayer(即 GMSPanoramaLayer)来实现。
街景中的标记
GMSPanoramaView 对象能够显示地图标记。您可以通过设置 GMSMapView 或 GMSPanoramaView 对象上的相应属性,在其中使用相同的 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上的方法列表。