配置地图

请选择平台: Android iOS

本概览介绍了如何使用 Maps SDK for iOS 配置已添加到 iOS 应用的地图。

概览

将地图添加到应用后,您可以配置初始选项和运行时 地图设置。如需详细了解如何添加地图容器,请参阅添加 地图

初始地图设置包括:

在运行时,您可以通过 更新 GMSMapView 对象。

地图选项

初始化地图视图时,可以使用 GMSMapViewOptions。选项属性包括 framecameramapIDbackgroundColor

地图选项
CGRect
地图框架。默认值为 CGRectZero。
camera
GMSCameraPosition
默认地图镜头位置。
mapID
GMSMapID
Google 地图 ID。可选参数。
backgroundColor
UIColor
默认值为 UIColor.lightGray

配置地图选项

您可以设置自己的选项属性,也可以将实例化的 将 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
没有地图图块。该地图不会渲染基本地图图块。此模式与功能块层结合使用非常有用。当地图类型为 设为 none。

更改地图类型

如需设置地图类型,请为 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 会显示机场、购物中心、大型零售商店和公交站点等室内场所的楼层平面图。室内楼层平面图已集成到 “normal”地图类型 (kGMSTypeNormal), 当用户放大地图时,地图则逐渐消失。

您可以停用室内地图,只需设置indoorEnabledGMSMapView更改为NO

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

或者,您也可以只停用楼层选择器控件

正在添加楼层平面图

select 中提供了楼层平面图 营业地点。 如果相关建筑物没有楼层平面图数据 突出显示,您可以:

  • 添加楼层 方案 直接上传到 Google 地图。这样,您的方案就可供 Google 地图。
  • 地面叠加层的形式显示楼层平面图。这样一来,只有 查看您的楼层平面图的用户。

路况图层

您可以授权用户查看在顶部叠加了交通密度信息的地图。这样可让用户直观了解本地的交通状况。您可以通过调用 该 trafficEnabled 方法。以下示例展示了路况图层在地图上的可能显示方式。

显示路况的 Google 地图
图层

无障碍

默认情况下,地图上的辅助功能元素是隐藏的。您可以启用 通过设置 accessibilityElementsHidden 属性来实现此目的 将GMSMapView更改为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 建筑 下图中华盛顿西雅图的图片中。

华盛顿州西雅图建筑的 3D 地图。

您可以在 Swift 或 Objective-C 中设置相应的 GMSMapView 属性,以停用 3D 建筑,如下所示:

Swift

mapView.isBuildingsEnabled = false
      

Objective-C

[mapView setBuildingsEnabled:NO];
      

地图内边距

Google 地图旨在填充由 GMSMapView 定义的整个区域。 地图外观和行为的若干方面都由尺寸 视图:

  • 摄像头的目标反映含内边距的区域的中心。
  • 地图控件以地图边缘为参照物进行定位。
  • 版权声明或 Google 徽标等法律信息沿地图底部边缘显示。

您可以利用 GMSMapView.padding 属性。地图会继续填充 整个容器,但文字和控件定位、地图手势和相机 就像是被放置在一个更小的空间内一样。这会导致 进行以下更改:

  • 使用 API 调用或按下按钮(例如罗盘按钮、“我的位置”按钮)进行的镜头移动会变成相对于内边距区域的移动。
  • GMSMapView.projection 会返回一个投影,其中仅包含含内边距的 区域。
  • 界面控件会按指定的 。

设计与地图的某些部分重叠的界面时,内边距会很有用。 例如,在图像中,地图沿顶部边缘和右侧边缘设置了内边距。 可见的地图控件和法律文本将沿含内边距的边缘 而地图会继续填满整个容器 以蓝色显示在此示例中,您可以让菜单悬浮在地图右侧的上方,这样不会遮盖住地图控件。

地图内边距

如需向地图添加内边距,请创建一个 UIEdgeInsets 对象并将其传递给 GMSMapViewpadding 属性。

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;
      

地图配色方案

对于普通和地形类型的地图,您可以将地图配色方案设置为深色, 或者使用当前的系统设置。例如,你可以调暗或 根据一天当中的时段或者室内或室外使用,调亮地图配色方案 设备的实际情况

使用GMSMapView overrideUserInterfaceStyle: 设置和更新地图配色方案。

Swift

let options = GMSMapViewOptions()
// Map is init to use light mode by default.
let mapView = GMSMapView(options: options)
// Set map to use dark mode.
mapView.overrideUserInterfaceStyle = .dark
// Set map to use light mode.
mapView.overrideUserInterfaceStyle = .light
// Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle
mapView.overrideUserInterfaceStyle = .unspecified

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
// Map is init to always use light mode.
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
// Set map to use dark mode.
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
// Set map to use light mode.
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
// Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;