Nhận các tuyến đường thay thế

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Theo mặc định, Routes API trả về tuyến đường mặc định, thường là tuyến đường nhanh nhất từ điểm khởi hành đến điểm đến. Khi bạn yêu cầu các tuyến đường thay thế, API sẽ trả về tối đa 3 tuyến đường cùng với tuyến đường mặc định. Sau đó, khách hàng có thể chọn tuyến đường phù hợp nhất với yêu cầu của họ.

Những điều cần cân nhắc khi yêu cầu các tuyến đường thay thế

Để yêu cầu các tuyến đường thay thế, hãy lưu ý những điểm sau:

  • Bạn chỉ có thể yêu cầu các tuyến đường thay thế cho những tuyến đường không có điểm tham chiếu trung gian. Việc yêu cầu các tuyến đường thay thế khi tuyến đường chỉ định các điểm tham chiếu trung gian sẽ không gây ra lỗi. Tuy nhiên, không có tuyến đường thay thế nào được trả về.

  • Phản hồi chứa tối đa 3 tuyến đường thay thế. Tuy nhiên, đôi khi không có tuyến đường thay thế nào, nên phản hồi chỉ chứa tuyến đường mặc định.

  • Do cần thêm quy trình xử lý để tính toán các tuyến đường thay thế, nên việc yêu cầu các tuyến đường thay thế có thể làm tăng thời gian phản hồi của API.

Ví dụ về yêu cầu tuyến đường thay thế

Đặt computeAlternativeRoutes thành true để yêu cầu các tuyến đường thay thế. Ví dụ sau đây cho thấy cách yêu cầu các tuyến đường thay thế trong yêu cầu phương thức computeRoutes (REST).

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude":42.340173523716736,
        "longitude":-71.05997968330408
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude":42.075698891472804,
        "longitude": -72.59806562080408
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference":"TRAFFIC_AWARE",
  "computeAlternativeRoutes": true
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeLabels' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Trong ví dụ này, bạn chỉ định một mặt nạ trường để phản hồi chỉ chứa các thuộc tính duration, distanceMeters,routeLabels cho mỗi tuyến đường. Sau đó, khách hàng của bạn có thể sử dụng thông tin đó để chọn tuyến đường cần đi. Để biết thêm thông tin, hãy xem phần Chọn thông tin cần trả về.

Ví dụ về phản hồi cho các tuyến đường thay thế

Trong phản hồi, hãy dùng thuộc tính mảng routeLabels để xác định tuyến đường tiếp cận:

  • Đối với tuyến đường mặc định, thuộc tính routeLabels chứa DEFAULT_ROUTE.

  • Đối với mọi tuyến đường thay thế, thuộc tính routeLabels đều chứa DEFAULT_ROUTE_ALTERNATE.

Trong ví dụ này, phản hồi chứa tuyến đường mặc định và 2 tuyến đường thay thế. Lưu ý rằng giá trị của các thuộc tính durationdistanceMeters khác nhau đối với mỗi tuyến đường:

{
  "routes": [
    {
      "distanceMeters": 150322,
      "duration": "5309s",
      "routeLabels": [
        "DEFAULT_ROUTE"
      ]
    },
    {
      "distanceMeters": 157614,
      "duration": "6879s",
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    },
    {
      "distanceMeters": 189311,
      "duration": "7376s",
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    }
   ]
}

Đưa hình nhiều đường vào phản hồi

Để giúp người dùng dễ dàng chọn tuyến đường, hãy thêm polyline cho từng tuyến đường vào phản hồi. Sau đó, bạn có thể hiển thị từng đường nhiều đoạn trên bản đồ.

Để thêm đường nhiều đoạn, hãy thêm routes.polyline vào mặt nạ trường:

-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeLabels,routes.polyline'

Sau đó, phản hồi sẽ chứa đường nhiều đường cho từng tuyến đường:

{
  "routes": [
    {
      "distanceMeters": 150322,
      "duration": "5309s",
      "polyline": {
        "encodedPolyline": "mrlaGtavpLPLBTm…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE"
      ]
    },
    {
      "distanceMeters": 157614,
      "duration": "6879s",
      "polyline": {
        "encodedPolyline": "DmEd`@e@pCo@pCs@z…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    },
    {
      "distanceMeters": 189311,
      "duration": "7376s",
      "polyline": {
        "encodedPolyline": "FVLL|Af@HPAV…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    }
   ]
}