默认情况下,API 会将中间航点视为路线上的停靠点。
不过,您可以将中间航点配置为车辆不停车通过的via航点。
使用经停航点来规划或调整特定路线。经停航点不会将路线拆分为单独的接送点或下车点,而是强制路线引擎在前往目的地的途中经过特定位置,例如,遵循首选路段或避开已知危险。
如果路线包含一个起点、一个或多个经停中间航点以及一个终点,则该路线仅包含一个路线路段,该路段直接连接起点和终点。
如需将中间航点配置为经停航点,请在 REST Waypoint 资源或 gRPC Waypoint 消息中将航点的 via 属性设置为 true。
虽然 Routes API 接受地址、地点 ID 以及纬度和经度坐标,但纬度和经度(或 latLng)坐标可为经停航点提供最精确的路线调整。
当您通过拖动地图上的航点来创建路线时,via 属性最有效。这样,您就可以实时查看最终路线,并帮助您将航点放置在可到达的位置。
示例:设置经停航点
以下示例演示了如何在完整的 computeRoutes POST 请求中为中间航点设置 "via": true:
curl -X POST -d '{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, "intermediates": [ { "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0807784 } }, "via": true } ], "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
使用地址或地点 ID 作为经停航点
虽然我们建议使用纬度和经度坐标来实现精确的经停点路线规划,但您也可以使用地址字符串或地点 ID 指定中间航点。
当您使用地址或地点 ID 作为经停航点时,API 会插值并将位置吸附到最近的可导航道路。与精确坐标相比,这种道路吸附过程有时可能会导致路线变化或不准确。
如果您使用地址字符串或 Plus Code 指定航点,API 会对该位置进行地理编码,并在响应的 geocodingResults.intermediates 数组中返回匹配的地点 ID。
对于 intermediates 数组中的每个元素,使用 intermediateWaypointRequestIndex 属性确定请求中的哪个中间航点对应于响应中的地点 ID。
示例:请求获取经停航点的地点 ID
以下示例显示了一个包含三个经停中间航点的请求,每个航点都指定了 "via": true:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "intermediates": [ { "address": "450 Serra Mall, Stanford, CA 94305, USA", "via": true }, { "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0807784 } }, "via": true }, { "address": "1836 El Camino Real, Redwood City, CA 94063", "via": true } ], "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,geocodingResults' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
响应包含 geocodingResults 数组,其中包含您在请求索引 0 和索引 2 处按地址指定的出发地、目的地和两个中间航点的地点 ID。由于您使用经纬度坐标指定了索引 1 处的中间航点,因此 API 会从 geocodingResults 中省略该航点:
{ "routes": [ { "distanceMeters": 54200, "duration": "2400s", "legs": [ { "distanceMeters": 54200, "duration": "2400s", "startLocation": { "latLng": { "latitude": 37.4220, "longitude": -122.0841 } }, "endLocation": { "latLng": { "latitude": 37.7786, "longitude": -122.3893 } } } ] } ], "geocodingResults": { "origin": { "geocoderStatus": {}, "type": [ "premise" ], "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g" }, "destination": { "geocoderStatus": {}, "type": [ "premise" ], "placeId": "ChIJI7ES6tl_j4ARVpDZoXbWAiY" }, "intermediates": [ { "geocoderStatus": {}, "intermediateWaypointRequestIndex": 0, "type": [ "street_address" ], "placeId": "ChIJvdLMGyq7j4ARScE5tWX_C0Y" }, { "geocoderStatus": {}, "intermediateWaypointRequestIndex": 2, "type": [ "premise" ], "placeId": "ChIJkTc0GKajj4AR9UMsOSHwGD0" } ] } }