前往导航点

Navigation SDK for iOS 提供了更强大的方式来指定航点或导航点,从而提供更准确的路线和更好的到达体验,尤其适用于具有多个入口或特定导航点的目的地。您可以使用 navigationPointToken 规划到精确位置的路线,是一个字符串,用于对位置和额外的 路线上下文进行编码。您还可以将纬度和经度坐标与地点 ID 结合使用,以提供更多背景信息。

背景

在 v10.10 之前,您可以使用位置坐标或地点 ID 定义 Waypoint。虽然有时有效,但仅根据经纬度进行路线规划有时可能会导致下车点或上车点不理想,尤其是在大型场地、公园或有多个入口的建筑物中。结果可能会贴靠到最近的路段,但这可能不是最方便或最正确的接入点。

增强型航点选项允许您提供更多上下文,从而解决了这一问题。

使用导航点令牌

如需最精确地规划到特定接入点(例如入口、装卸区或指定上车区)的路线,您可以使用 navigationPointToken。

此令牌是通过调用 Geocoding API 的 Destinations 方法获取的。它表示与地点关联的特定可路线规划导航点。

如需指定导航点令牌,请执行以下操作:

  1. 从 Geocoding API 的 Destinations 方法响应中获取 navigationPointToken。

  2. 在创建 GMSNavigationWaypoint 时指定该 navigationPointToken。

Swift

// Create a waypoint using a navigation endpoint token
let waypointTwo = GMSNavigationWaypoint(
  navigationPointToken: "ChIJALijSXPhQkARHmIozCCbXsASEgkFVjYHGH6PgBFrbM7wl3..",
  title: "Sydney Opera House")

// Route to the waypoint
navigator.setDestinations([waypointTwo]) { [weak self] routeStatus in
   self?.handleRouteCallback(status: routeStatus)
}

Objective-C

GMSNavigationWaypoint *waypointTwo =
    [[GMSNavigationWaypoint alloc] initWithNavigationPointToken:@"sampleNavigationPointToken"
                                                          title:@"Sydney Opera House"];

使用导航点令牌和路线令牌

您可以通过 Geocoding API 检索导航点令牌,通过 Routes API 检索路线令牌,然后将导航点令牌和路线令牌都传递给 Navigation SDK。这在拼车或送货等场景中非常有用,在这些场景中,您可以使用 Routes API 计算行程价格,并且需要导航点令牌的精确度。

借助路线令牌,Navigation SDK 会在您用于计算价格的同一路线上开始导航。这可以降低行程路线过长或过短的风险,从而避免“价格冲击”。

如需详细了解如何使用导航点令牌指定位置和创建路线令牌,请参阅 Routes API 文档。请参阅“规划路线”,了解如何使用路线令牌规划路线。

下图展示了拼车或送餐应用如何结合使用导航点令牌和路线令牌:

拼车或送货用例图
拼车或送货用例示意图

合并地点 ID 和位置

从 v10.10 开始,您可以在创建航点时同时提供地点 ID 和位置坐标。如果您想指定一个精确的点(位置),同时仍提供整体地点(地点 ID)的上下文,则此方法非常有用。这样,Navigation SDK 就可以通过突出显示目的地建筑物或显示与地点 ID 相关的附近地图注点,提供更丰富的到达体验。

Swift

// Create a waypoint using both the latlng and placeID
let waypoint = GMSNavigationWaypoint(
  location: CLLocationCoordinate2DMake(-33.85657945261524, 151.21535034203333),  
  placeID: "ChIJ3S-JXmauEmsRUcIaWtf4MzE",
  title: "Sydney Opera House")

// Route to the waypoint
navigator.setDestinations([waypoint]) { [weak self] routeStatus in
   self?.handleRouteCallback(status: routeStatus)
}

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint = [[GMSNavigationWaypoint alloc] initWithLocation:placeID:coordinate title:@"waypoint from location and placeiD"];

注意事项:

如果您同时提供 placeID 和 location:

  • 该路线主要针对指定的 location。
  • placeId 用作上下文,以提升到达体验。
  • 回退:如果 SDK 确定提供的 placeId 对应的地图项距离给定的 location 太远,则会忽略 placeId。在这种情况下,系统只会路由到 location,并且无法提供特定于地点的抵达体验增强功能。

有效航点配置摘要

规范 location placeID navigationPointToken 路由行为 目的地突出显示
仅限位置坐标 set 缺失 缺失 路由到距离指定坐标最近的路段 如果可以高度确信地推断出目的地,则会显示
仅限地点 ID 缺失 set 缺失 前往地点 ID 的默认导航点的路线 出发地地点 ID
仅限导航点令牌 缺失 缺失 set 前往由令牌表示的精确导航点的路线 来自原始 Geocoding API 的 destinations 方法请求中定义的目的地
位置坐标和地点 ID 组合 se set 缺失 路由到距离指定坐标最近的路段 来自地点 ID,但如果地点 ID 与纬度/经度坐标相距太远,则不会显示