前往导航点的路线

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

背景

在 v7.4 之前,您可以使用纬度和经度坐标地点 ID 定义 Waypoint。虽然有时有效,但仅按纬度和经度规划路线有时会导致下车点或上车点不理想,尤其是在大型场所、公园或有多个入口的建筑物中。结果可能会对准到最近的路段,但该路段可能不是最方便或最正确的导航点。

增强型途经点选项允许提供更多背景信息,从而解决此问题。

使用导航点令牌

如需获得前往特定导航点(例如入口、装货平台或指定上车区)的最精确路线,您可以使用 navigationPointToken。此令牌是通过调用 Geocoding API 的 destinations 方法获得的。它表示与某个地点关联的特定可导航点。

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

  1. Geocoding API 的 Destinations 方法响应中获取 navigationPointToken
  2. 使用构建器中的 setNavigationPointToken() 方法创建 Waypoint

注意:使用 setNavigationPointToken() 时,您不能同时使用 setLatLng()setPlaceIdString()。这些方法与 setNavigationPointToken() 互斥。

// Assuming 'navPointToken' is a String obtained from the destinations method of the Geocoding API
// Assuming 'destinationName' is a String title for the waypoint

Waypoint waypointWithToken = Waypoint.builder()
    .setTitle(destinationName)
    .setNavigationPointToken(navPointToken)
    .build();

// Use this waypoint in navigator.setDestinations()

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

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

路线令牌会使 Navigation SDK 选择的路线偏向用于定价的路线。这样可以降低行程使用较长或较短路线的风险,从而避免出现“价格冲击”。

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

下图展示了网约车或外卖应用如何同时使用导航点令牌和路线令牌:

“网约车或送货”使用场景图示
网约车或送货使用场景示意图

结合地点 ID 与经纬度

从 v7.4 开始,您可以在创建 Waypoint 时同时提供地点 ID 以及纬度和经度坐标。如果您想指定一个精确的点(纬度/经度),同时仍提供整个地点的上下文(地点 ID),此方法非常有用。这样一来,Navigation SDK 就可以通过突出显示目的地建筑物或显示与地点 ID 相关的附近兴趣点,提供更丰富的到达体验。

// Assuming 'placeId' is the Place ID String
// Assuming 'lat' and 'lng' are the double values for latitude and longitude
// Assuming 'destinationName' is a String title for the waypoint

Waypoint waypointWithPlaceIdAndLatLng = Waypoint.builder()
    .setTitle(destinationName)
    .setPlaceIdString(placeId)
    .setLatLng(lat, lng)
    .build();

// Use this waypoint in navigator.setDestinations()

注意事项

如果您同时提供 placeIdlatlng

  • 相应路线主要面向指定的 latlng
  • placeId用作上下文,以提升到达体验。
  • 回退:如果 SDK 确定所提供的 placeId 对应的功能与给定的 latlng 相差太远,则会忽略 placeId。在这种情况下,系统只会前往 latlng,而不会提供特定地点的到达体验增强功能。

有效航点配置摘要

方法 setLatLng() setPlaceIdString() setNavigationPointToken() 路由行为 突出显示目的地
仅限经纬度坐标 set 缺席 缺席 前往距离指定坐标最近的路段的路线 如果系统能以较高置信度推断出目的地,则会显示此字段
仅限地点 ID 缺席 set 缺席 前往相应地点 ID 的默认导航点的路线 出发地地点 ID
仅限导航点令牌 缺席 缺席 set 前往令牌所代表的精确导航点的路线 来自 Geocoding API 的 destinations 方法请求中定义的目的地
经纬度坐标和地点 ID 的组合 set set 缺席 前往距离指定坐标最近的路段的路线 来自地点 ID,但如果地点 ID 与纬度/经度坐标相距太远,则不会显示