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

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

  • Chế độ lái xe
  • Xe mô tô hai bánh
  • Đạp xe
  • Đi bộ

Tại sao nên tối ưu hoá điểm tham chiếu?

Khi xây dựng một ứng dụng hướng dẫn người dùng qua một số điểm tham chiếu trên đường đến một điểm đến, điều quan trọng là khách du lịch chuyển các điểm tham chiếu theo thứ tự tối ưu. Điều này đảm bảo rằng khách du lịch đến được mọi điểm tham chiếu trong khoảng 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 qua các điểm tham chiếu theo thứ tự được cung cấp ban đầu. Bạn có thể nhận ComputeRoutes để tối ưu hoá tuyến đường bằng cách sắp xếp lại các điểm tham chiếu trung gian thành một thứ tự hiệu quả hơn. Bạn sẽ nhận được một tuyến có điểm tham chiếu được tối ưu hoá nếu đặt trường optimizeWaypointOrder trong nội dung yêu cầu thành true.

Lưu ý: Cách tính toán 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ố ngã rẽ.

Nhận điểm tham chiếu được sắp xếp lại

Để tạo một tuyến đường có các điểm tham chiếu đượ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 thành ComputeRoutes. Ngoài ra, hãy thêm trường optimizedIntermediateWaypointIndex vào mặt nạ cho trường (field mask). Phần 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ị dựa trên 0.

Yêu cầu mẫu

Yêu cầu trong ví dụ sau đây cung cấp một tuyến đường gần khuôn viên Đại học Stanford. Các điểm tham chiếu tuyến đường đã được cung cấp tuần tự trong yêu cầu. Yêu cầu chứa một điểm gốc và một đích đế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 của đối tượng tuyến đường trong nội dung phản hồi. Nhiều đường được mã hoá giống như trong API Chỉ đườngComputeRoutes.

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 tham chiếu sẽ đảo ngược thứ tự ban đầu.

Một yêu cầu có điểm tham chiếu được tối ưu hoá sẽ mất nhiều thời gian xử lý hơn so với một yêu cầu định tuyến đơn giản. Do đó, 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 đề yêu cầu X-Server-Timeout thành ít nhất 10 giây. Nếu tiếp tục 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 giới hạn sử dụng cho các điểm tham chiếu trung gian trên tuyến đường của mình:

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

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

  • Nếu yêu cầu của bạn có từ 25 điểm 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 gốc và điểm đến.

    • Phương thức đi lại phải là DRIVE.