配置地图

选择平台Android iOS

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

概览

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

初始地图设置包括:

  • 相机位置,具体包括:位置、缩放级别、方向角和倾斜度。如需详细了解相机定位,请参阅相机和视图
  • 地图类型
  • 要显示的界面组件,例如缩放按钮和罗盘。
  • 要启用的手势

在运行时,您可以通过更新 GMSMapView 对象来配置这些设置和一些额外的设置。

地图类型

您可以使用以下任意一种地图类型来自定义地图。地图的类型决定了地图的整体表现形式。例如,一个地图集通常包含的政治地图侧重于显示边界,而道路地图则会显示某个城市或地区的所有道路。Maps SDK for iOS 提供了以下地图类型:

地图类型
常规
kGMSTypeNormal
典型的路线图。显示道路、人类建造的一些地图项以及河流等重要的自然地图项。此外,还会显示道路和地图项标签。
混合
kGMSTypeHybrid
同时添加了卫星照片数据和路线图。此外,还会显示道路和地图项标签。
卫星图像
kGMSTypeSatellite
卫星照片数据。不显示道路和地图项标签。
地形
kGMSTypeTerrain
地形数据。地图包含颜色、轮廓线和标签以及透视阴影。此外,还会显示一些道路和标签。
kGMSTypeNone
没有地图图块。该地图不会渲染基本地图图块。此模式在与图块图层结合使用时很有用。当地图类型设置为“none”时,系统将禁止显示路况数据。

更改地图类型

如需设置地图类型,请为 GMSMapView.mapType 属性分配新值。例如,如需显示卫星地图类型:

Swift

let camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.mapType = .satellite
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.mapType = kGMSTypeSatellite;
      

下面的选择器显示了同一位置地形、普通地图与混合地图之间的对比情况:

室内地图

在较高的缩放级别下,Maps SDK for iOS 会显示机场、购物中心、大型零售店和公交站点等室内场所的楼层平面图。室内楼层平面图已集成到“普通”地图类型 (kGMSTypeNormal) 的默认地图图块中,当用户放大地图时,楼层平面图会自动打开;当用户缩小地图时,楼层平面图会逐渐消失。

您可以通过将 GMSMapViewindoorEnabled 属性设置为 NO 来停用室内地图。

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

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

添加楼层平面图

楼层平面图目前在选择地点中可用。如果您想在应用中突出显示的建筑物没有楼层平面图数据,则您可以执行以下操作:

  • 直接向 Google 地图添加楼层平面图。这样做会将您的方案提供给 Google 地图的所有用户。
  • 地面叠加层的形式显示楼层平面图。这样一来,只有您的应用的用户才能查看楼层平面图。

路况图层

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

显示路况图层的 Google 地图

无障碍

默认情况下,地图上的辅助功能元素是隐藏的。您可以通过将 GMSMapViewaccessibilityElementsHidden 属性设置为 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 徽标等法律信息沿地图底部边缘显示。

您可以利用 GMSMapViewpadding 属性。地图将继续填充整个容器,但文本和控件定位、地图手势以及相机移动将呈现出将地图置于较小空间时的行为。这会导致出现以下变化:

  • 通过 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;