配置地图

请选择平台: Android iOS

本概览介绍了如何配置已添加到 iOS 应用的地图 使用 Maps SDK for 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
没有地图图块。该地图不会渲染基本地图图块。此模式是 在与 tile 结合使用时很有用 层。当地图类型为 设为 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

我的位置

默认情况下,地图上不显示任何位置数据。您可以启用蓝色的“我的 位置信息”通过将 myLocationEnabled 设为开启,来设定圆点和罗盘方向 GMSMapView

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 地图。

您可以停用 3D 建筑,方法是设置相应的 GMSMapView 属性,如下所示:

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;