浏览路线

请按照本指南在应用中绘制前往单个目的地的路线, 使用 iOS 版 Navigation SDK

概览

  1. 按照说明将 Navigation SDK 集成到您的应用中 在设置项目部分。
  2. 配置 GMSMapView
  3. 提示用户接受条款及条件,并授予位置信息权限 服务和后台通知。
  4. 创建一个包含一个或多个目的地的数组。
  5. 定义 GMSNavigator 来控制精细导航。

查看代码

提示用户进行必要的授权

在使用 Navigation SDK 之前,用户必须同意 条款和条件,并授权使用位置信息服务, 。如果您的应用将在后台运行,它也必须 提示用户授权导航提醒通知。此部分显示 如何显示所需的授权提示。

授权位置信息服务

Navigation SDK 使用位置信息服务,而该服务需要 用户授权。启用位置信息服务并显示授权 请按以下步骤操作:

  1. NSLocationAlwaysUsageDescription 键添加到 Info.plist
  2. 对于此价值,请简要说明您的应用为何需要位置信息 服务。例如:“此应用需要获得相关权限才能将位置信息服务用于 精细导航”

  3. 如需显示授权对话框,请调用 requestAlwaysAuthorization() 的 位置管理器实例。

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

授权提醒通知以获取后台指导

Navigation SDK 需要用户权限才能提供提醒 当应用在后台运行时发送通知。添加以下代码 来提示用户授予显示这些通知的权限:

Swift

UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
  granted, error in
    // Handle denied authorization to display notifications.
    if !granted || error != nil {
      print("User rejected request to display notifications.")
    }
}

Objective-C

// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
                      completionHandler:
 ^(
   BOOL granted,
   NSError *_Nullable error) {
     if (!error && granted) {
       NSLog(@"iOS Notification Permission: newly Granted");
     } else {
       NSLog(@"iOS Notification Permission: Failed or Denied");
     }
   }];

接受条款及条件

使用以下代码显示条款及条件对话框,并启用 在用户接受条款后导航。请注意,此示例包含 位置服务和导航提醒通知的代码(显示 )。

Swift

let companyName = "Ride Sharing Co."
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
  withCompanyName: companyName) { termsAccepted in
  if termsAccepted {
    // Enable navigation if the user accepts the terms.
    self.mapView.isNavigationEnabled = true
    self.mapView.settings.compassButton = true

    // Request authorization to use location services.
    self.locationManager.requestAlwaysAuthorization()

    // Request authorization for alert notifications which deliver guidance instructions
    // in the background.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
      granted, error in
        // Handle rejection of notification authorization.
        if !granted || error != nil {
          print("Authorization to deliver notifications was rejected.")
        }
    }
  } else {
    // Handle rejection of terms and conditions.
  }
}

Objective-C

NSString *companyName = @"Ride Sharing Co.";
[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithCompanyName:companyName
  callback:^(BOOL termsAccepted) {
   if (termsAccepted) {
     // Enable navigation if the user accepts the terms.
     _mapView.navigationEnabled = YES;
     _mapView.settings.compassButton = YES;

     // Request authorization to use the current device location.
     [_locationManager requestAlwaysAuthorization];

     // Request authorization for alert notifications which deliver guidance instructions
     // in the background.
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     UNAuthorizationOptions options = UNAuthorizationOptionAlert;
     [center requestAuthorizationWithOptions:options
                           completionHandler:
     ^(
       BOOL granted,
       NSError *_Nullable error) {
         if (!error && granted) {
           NSLog(@"iOS Notification Permission: newly Granted");
         } else {
           NSLog(@"iOS Notification Permission: Failed or Denied");
         }
       }];
   } else {
     // Handle rejection of the terms and conditions.
   }
 }];

创建路线并开始导航

要绘制路线,请使用数组调用 Navigator 的 setDestinations() 方法 包含一个或多个要访问的目的地 (GMSNavigationWaypoint)。如果成功 路线就会在地图上显示出来。如需开始沿路线导航,请执行以下操作: 从第一个目的地开始,在isGuidanceActivetrue 回调。

下例显示了:

  • 创建具有两个目的地的新路线。
  • 正在启动指南。
  • 启用后台导航通知。
  • 模拟路线沿途的行程(可选)。
  • 将相机模式设置为“关注”(可选)。

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)
  destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
                                                 title:"Marina Park")!)

  mapView.navigator?.setDestinations(destinations) { routeStatus in
    self.mapView.navigator?.isGuidanceActive = true
    self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
    self.mapView.cameraMode = .following
  }
}

Objective-C

- (void)startNav {
  NSArray<GMSNavigationWaypoint *> *destinations =
  @[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
                                             title:@"PCC Natural Market"],
    [[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
                                             title:@"Marina Park"]];

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

如需了解地点 ID,请参阅地点 ID

设置出行方式

出行方式决定要提取的路线类型,以及 确定用户的课程。您可以为不同目的地 路线:驾车、骑车、步行和打出租车。在驾车和打出租车模式下,用户的路线为 基于行进方向、在骑车和步行模式下 用设备所面向的方向来表示

设置 travelMode 属性,如以下示例中所示:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

设置要避开的道路

使用 avoidsHighwaysavoidsTolls BOOL 属性来避免 沿途的高速公路和/或收费公路。

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

PlaceID 查找工具

您可以使用 PlaceID 查找工具 查找用于路线目的地的地点 ID。使用 GMSNavigationWaypointplaceID 添加目的地。

浮动文本

您可以在应用中的任意位置添加悬浮文本,只要 Google 支持 未涉及归因。Navigation SDK 不支持在 文本映射到地图上的纬度/经度,或者是标签。如需更多信息 请参见信息窗口