本概览介绍了如何使用 Maps SDK for iOS 配置已添加到 iOS 应用的地图。
概览
将地图添加到应用后,您可以配置地图的初始选项和运行时设置。如需详细了解如何添加地图容器,请参阅添加地图。
初始地图设置包括:
在运行时,您可以通过更新 GMSMapView
对象来配置这些设置和一些其他设置。
地图选项
初始化地图视图时,可以使用 GMSMapViewOptions
设置配置选项。选项属性包括 frame
、camera
、mapID
、backgroundColor
或 screen
。
地图选项 | |
---|---|
帧 | 值:
CGRect 地图框架。默认为 CGRectZero。
|
camera | 值:
GMSCameraPosition 默认的地图镜头位置。
|
mapID | 值:
GMSMapID Google mapID。可选参数。
|
backgroundColor | 值:
UIColor 默认为 UIColor.lightGray
|
屏幕 | 值:
UIScreen 必须使用 CarPlay。隐含主屏幕的默认值。
|
配置地图选项
您可以设置自己的选项属性,也可以将具有默认值的实例化 GMSMapViewOptions
直接传递给 GMSMapView
。
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
以下示例显示了如何将具有默认值的 GMSMapViewOptions
对象直接传递给 GMSMapView
。
Swift
let options = GMSMapViewOptions() let mapView = GMSMapView(options:options) //initialized with default values
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; //initialized with default values
配置背景颜色
在深色模式下工作或在地图视图之间切换时,替换默认地图背景颜色可能会很有用。这可以通过设置地图选项的 backgroundColor
属性来实现。
Swift
let options = GMSMapViewOptions() options.backgroundColor = UIColor.yellowColor let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.backgroundColor = UIColor.yellowColor; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
地图类型
您可以使用以下任意一种地图类型来自定义地图。地图的类型决定了地图的整体表现形式。例如,一个地图集通常包含着重显示边界的行政区划地图和显示某个城市或地区所有道路的路线图。Maps SDK for iOS 提供了以下类型的地图:
地图类型 | |
---|---|
常规 | 值:
kGMSTypeNormal 典型的路线图。显示道路、人类建造的一些地图项以及河流等重要的自然地图项。此外,还会显示道路和地图项标签。
|
混合 | 值:
kGMSTypeHybrid 同时添加了卫星照片数据和路线图。此外,还会显示道路和地图项标签。 |
卫星 | 值:
kGMSTypeSatellite 卫星照片数据。不显示道路和地图项标签。
|
地形 | 值:
kGMSTypeTerrain 地形数据。地图包含颜色、轮廓线和标签以及透视阴影。此外,还会显示一些道路和标签。
|
无 | 值:
kGMSTypeNone 没有地图图块。该地图不会渲染基本地图图块。此模式在与图块图层结合使用时很有用。当地图类型设置为“无”时,系统将停用路况数据显示。 |
更改地图类型
若要设置地图类型,请为 GMSMapView.mapType
属性分配一个新值。例如,如需显示卫星地图类型:
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options) mapView.mapType = .satellite
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; mapView.mapType = kGMSTypeSatellite;
下面的选择器显示了同一位置地形地图、普通地图和混合地图的对比情况:
室内地图
在较高的缩放级别下,Maps SDK for iOS 将显示机场、购物中心、大型零售店和公交站点等室内场所的楼层平面图。室内楼层平面图已集成到“普通”地图类型 (kGMSTypeNormal
) 的默认地图图块中。当用户放大地图时,楼层平面图会自动启用;当用户缩小地图时,楼层平面图会淡出。
您可以通过将 GMSMapView
的 indoorEnabled
属性设置为 NO
来停用室内地图。
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
或者,您也可以仅停用楼层选择器控件。
添加楼层平面图
部分地点提供楼层平面图。如果您想在应用中突出显示的建筑物没有楼层平面图数据,您可以执行以下操作:
路况图层
您可以授权用户查看在顶部叠加了交通密度信息的地图。这样可让用户直观了解本地的交通状况。您可以通过调用 trafficEnabled
方法来启用和停用路况图层。以下示例展示了路况图层在地图上的可能显示方式。
无障碍
默认情况下,地图上的辅助功能元素是隐藏的。您可以通过将 GMSMapView
的 accessibilityElementsHidden
属性设置为 NO
来启用无障碍功能。这会导致为叠加层对象(例如 GMSMarker
和信息窗口、GMSPolyline
等)生成无障碍元素。
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
此属性遵循非正式的 UIAccessibility
协议,但 Maps SDK for iOS 中的默认值为 YES
。
我的位置
默认情况下,地图上不会显示任何位置数据。您可以通过在 GMSMapView
上设置 myLocationEnabled
来启用蓝色的“我的位置”圆点和罗盘方向。
Swift
mapView.isMyLocationEnabled = true
Objective-C
mapView.myLocationEnabled = YES;
启用此功能后,会通过 myLocation
属性提供用户的当前位置。此媒体资源可能不会立即可用 - 例如,如果 iOS 提示用户允许访问此数据。在本例中为 nil
。
Swift
print("User's location: \(String(describing: mapView.myLocation))")
Objective-C
NSLog(@"User's location: %@", mapView.myLocation);
3D 建筑
近距离观看时,许多城市会显示 3D 建筑,如以下华盛顿州西雅图图片所示。

您可以通过在 Swift 或 Objective-C 中设置相应的 GMSMapView
属性来停用 3D 建筑,如下所示:
Swift
mapView.isBuildingsEnabled = false
Objective-C
[mapView setBuildingsEnabled:NO];
地图内边距
Google 地图旨在填充由 GMSMapView
定义的整个区域。地图的外观和行为的若干方面都取决于视图的尺寸:
- 镜头的目标反映了含内边距的区域的中心。
- 地图控件以地图边缘为参照物进行定位。
- 版权声明或 Google 徽标等法律信息沿地图底部边缘显示。
您可以利用 GMSMapView
.padding
属性。地图会继续填满整个容器,但文本和控件定位、地图手势以及镜头移动效果就像是将其放置在较小的空间内。这会导致出现以下变化:
- 通过 API 调用或按下按钮(例如罗盘、“我的位置”)进行的镜头移动是相对于含内边距的区域而言的。
GMSMapView
.projection
会返回仅包含含内边距的区域的投影。- 界面控件会按指定的点数从容器边缘偏移。
设计与地图的某些部分重叠的界面时,内边距会很有用。例如,在图像中,地图沿顶部边缘和右侧边缘设置了内边距。可见地图控件和法律文本沿含内边距的区域的边缘显示(显示为绿色),而地图会继续填充整个容器(显示为蓝色)。在此示例中,您可以让菜单悬浮在地图右侧的上方,这样不会遮盖住地图控件。
如需向地图添加内边距,请创建一个 UIEdgeInsets
对象并将其传递给 GMSMapView
。padding
属性。
Swift
// Insets are specified in this order: top, left, bottom, right let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0) mapView.padding = mapInsets
Objective-C
// Insets are specified in this order: top, left, bottom, right UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0); mapView.padding = mapInsets;