Tối ưu hoá điểm tham chiếu tuyến đường của bạn

Tính năng tối ưu hoá điểm dừng là một tính năng Ưu tiên tuyến đường giúp mở rộng ComputeRoutes. Tính năng này tối ưu hoá thứ tự của các điểm dừng trung gian trong tuyến đường của người di chuyển, đảm bảo rằng họ di chuyển theo tuyến đường hiệu quả nhất có thể. Phương thức triển khai ComputeRoutes của tính năng tối ưu hoá điểm tham chiếu hỗ trợ các chế độ di chuyển sau:

  • Lái xe
  • Đi xe máy
  • Đạp xe
  • Đi bộ

Tại sao nên sử dụng tính năng tối ưu hoá điểm dừng?

Khi xây dựng một ứng dụng hướng dẫn người dùng đi qua một số điểm dừng trên đường đến một điểm đến, điều quan trọng là người di chuyển phải đi qua các điểm dừng theo thứ tự tối ưu. Điều này đảm bảo rằng người di chuyển đến mọi điểm tham chiếu trong thời gian ngắn nhất.

Cách hoạt động

Theo mặc định, ComputeRoutes tính toán một tuyến đường đi qua các điểm dừng theo thứ tự ban đầu. Bạn có thể yêu cầu ComputeRoutes tối ưu hoá tuyến đường bằng cách sắp xếp lại các điểm dừng trung gian theo thứ tự hiệu quả hơn. Bạn sẽ nhận được một tuyến đường có các điểm dừng được tối ưu hoá nếu bạn đặt trường optimizeWaypointOrder trong nội dung yêu cầu thành true.

Lưu ý: Tính năng tối ưu hoá điểm tham chiếu chủ yếu dựa trên thời gian di chuyển, nhưng tính năng này cũng xem xét các yếu tố khác, chẳng hạn như khoảng cách và số lượt rẽ.

Nhận các điểm dừng được sắp xếp lại

Để nhận một tuyến đường có các điểm dừng được sắp xếp lại, hãy đặt trường boolean optimizeWaypointOrder thành true trong nội dung yêu cầu gửi đến ComputeRoutes. Ngoài ra, hãy thêm trường optimizedIntermediateWaypointIndex vào mặt nạ trường. Nội dung phản hồi chứa thứ tự điểm tham chiếu được tối ưu hoá trong các trường optimizedIntermediateWaypointIndex.

Lưu ý: Trường optimizedIntermediateWaypointIndex trả về các giá trị bắt đầu từ 0.

Yêu cầu mẫu

Yêu cầu mẫu sau đây cung cấp một tuyến đường gần khuôn viên Đại học Stanford. Các điểm dừng của tuyến đường đã được cung cấp tuần tự trong yêu cầu. Yêu cầu này chứa một điểm khởi hành và một điểm đến, với 2 điểm tham chiếu trung gian.

POST /v1alpha:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Server-Timeout: 10
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex,routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.418956,
        "longitude": -122.160815
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.4176423,
          "longitude":-122.1102246
        }
      }
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.407689,
          "longitude": -122.1360597
        }
      }
    }
  ],
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.4032137,
        "longitude": -122.0349119
      }
    }
  },
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": true,
  "routingPreference": "TRAFFIC_AWARE"}

Ví dụ về phản hồi

Bạn có thể tìm thấy các chỉ mục điểm tham chiếu trung gian được sắp xếp lại trong các trường optimizedIntermediateWaypointIndex trong đối tượng tuyến đường trong nội dung phản hồi. Đường nhiều đoạn được mã hoá giống như trong Directions APIComputeRoutes.

routes {
  distance_meters: 17647
  duration {
    seconds: 1866
  }
  polyline {
    encoded_polyline: "wkkcFvorhVU{@Ec@C}CG}@Mm@[}@i@y@[[g@_@Tk@BSjCgGfF|D\\Pv@Lj@@XaCTeC\\aCTs@`ByD`@k@h@e@x@Yh@GtADhBF|@G`AWpAs@lAsAdA{A`BmDr@cBmUqQoS}OyGmFiBsAgEwD}CaCU_@Og@@e@Hy@nGkO~@sBr@cBlDqIlByEp@}AjIfGnBbBHLLd@^p@~ErDfNrKrA~@DIhEeBTQ~AqDlE{KjBgE|FnEh@aAi@`A}FoE~AmD`A}BcAm@mHwFwD}CkLwIsDqCgF_EG[GKnCsDrA_BrC_CnCoBpEkD`EyClCsBcBeBIAkGkH]k@eJmKQKsAuA_@g@wCoDGQmEmFmIqROKaDuHvBkBxAgANCRH^f@v@dBHDD?`AUiBqEhBpEaATMCQYm@wAY]SIOByAfAwBjB_ByDaAwBiCeIA[c@aBqEuNOm@IQbA{c@p@aZFmCTuBLg@Tc@BUAKxOeV~Vy_@nBoDv@_BvAcDzA_EdG{RdC{HtIsY|B{Hx@mDbAuFdBsMbKsv@TaBf@}AdF{Sn@_DJq@Lo@aE`@]GUQmAmAQk@@g@RK`Ce@d@UDEPc@f@cCrAyGJs@X{AbIem@bA{JD_AIaAMg@o@{A_Ad@y@NaCLCsCK_FGI"
  }
  optimizedIntermediateWaypointIndex: 1
  optimizedIntermediateWaypointIndex: 0
}

Trong ví dụ này, hãy lưu ý rằng việc tối ưu hoá các điểm dừng sẽ đảo ngược thứ tự ban đầu của chúng.

Yêu cầu có các điểm dừng được tối ưu hoá mất nhiều thời gian xử lý hơn so với yêu cầu định tuyến đơn giản. Do đó, chúng tôi khuyên bạn nên đặt thời gian chờ cao hơn cho lệnh gọi phương thức bằng cách đặt giá trị cho tiêu đề của yêu cầu X-Server-Timeout thành ít nhất 10 giây. Nếu vẫn gặp lỗi hết thời gian chờ, bạn có thể thêm một giây nữa rồi thử lại.

Giới hạn sử dụng

Để sử dụng tính năng tối ưu hoá điểm tham chiếu, bạn phải tuân theo các giới hạn và điều kiện sử dụng sau:

  • Bạn có thể chỉ định tối đa hạn mức sử dụng cho các điểm dừng trung gian trên tuyến đường:

    • Tối đa 98 điểm dừng chỉ sử dụng toạ độ vĩ độ và kinh độ.
    • Tối đa 25 điểm dừng nếu bạn chỉ định bất kỳ điểm dừng nào bằng mã địa điểm.
  • Tất cả các điểm dừng phải thuộc loại stopover (dừng chân). Không có điểm dừng nào thuộc loại via (đi qua).

  • Bạn phải thêm routes.optimizedIntermediateWaypointIndex vào mặt nạ trường.

  • Nếu yêu cầu có từ 25 điểm dừng trung gian trở lên, thì yêu cầu đó cũng phải tuân thủ các điều kiện sau:

    • Khoảng cách đường thẳng tích luỹ giữa tất cả các điểm tham chiếu phải nhỏ hơn 1.000 km. Khoảng cách này bao gồm cả điểm khởi hành và điểm đến.

    • Chế độ di chuyển phải là DRIVE.