Yêu cầu tuyến đường thay thế

Theo mặc định, Routes API (API Tuyến đường) sẽ trả về tuyến mặc định, thường là tuyến nhanh nhất từ điểm gốc đến đích. Khi bạn yêu cầu các tuyến thay thế, API sẽ trả về tối đa 3 tuyến cùng với tuyến đường mặc định. Sau đó, khách hàng có thể chọn một 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 tuyến đường thay thế

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

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

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

  • Do cần phải xử lý thêm để tính toán các tuyến thay thế, nên việc yêu cầu các tuyến 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 tuyến đường thay thế. Ví dụ sau đây cho thấy cách yêu cầu các tuyến 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ạ cho trường (field mask) để phản hồi chỉ chứa các thuộc tính duration, distanceMeters,routeLabels cho mỗi tuyến. Sau đó, khách hàng có thể sử dụng thông tin đó để chọn tuyến đường sẽ đ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 tuyến đường thay thế

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

  • Đối với tuyến 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 sẽ chứa DEFAULT_ROUTE_ALTERNATE.

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

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

Thêm hình nhiều đường vào câu trả lời

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

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

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

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

{
  "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"
      ]
    }
   ]
}