경로 경유지 최적화

경유지 최적화는 ComputeRoutes를 확장하는 경로 선호 기능입니다. 여행자 경로에 있는 중간 경유지의 순서를 최적화하여 가장 효율적인 경로로 이동하도록 합니다. 경유지 최적화의 ComputeRoutes 구현은 다음 이동 모드를 지원합니다.

  • 운전
  • 전동 오토바이
  • 자전거
  • 산책

경유지 최적화를 사용해야 하는 이유

목적지까지 이동하는 여러 경유지를 통해 사용자를 안내하는 앱을 빌드할 때는 여행자가 최적의 순서로 경유지를 순회하는 것이 중요합니다. 이렇게 하면 여행자가 가장 짧은 시간 내에 모든 경유지에 도착하게 됩니다.

사용 방법

기본적으로 ComputeRoutes는 원래 제공된 순서대로 경유지를 통과하는 경로를 계산합니다. 중간 경유지를 더 효율적인 순서로 재배열하여 경로를 최적화하기 위해 ComputeRoutes를 가져올 수 있습니다. 요청 본문의 optimizeWaypointOrder 필드를 true로 설정하면 최적화된 경유지가 포함된 경로를 수신합니다.

참고: 경유지 최적화 계산은 주로 이동 시간을 기반으로 하지만 이 기능은 거리와 방향 전환 횟수와 같은 다른 요인도 고려합니다.

재정렬된 경유지 가져오기

경유지가 재정렬된 경로를 가져오려면 요청 본문의 부울 필드를optimizeWaypointOrder trueComputeRoutes로 설정합니다. 또한 필드 마스크에 optimizedIntermediateWaypointIndex 필드를 포함합니다. 응답 본문의 optimizedIntermediateWaypointIndex 필드에는 최적화된 경유지 순서가 포함됩니다.

참고: optimizedIntermediateWaypointIndex 필드는 0부터 시작하는 값을 반환합니다.

예시 요청

다음 예시 요청은 스탠포드 대학 캠퍼스 근처의 경로를 제공합니다. 요청에 경로 경유지가 순차적으로 제공되었습니다. 요청에는 출발지와 목적지, 그리고 두 개의 중간 경유지가 포함됩니다.

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

응답 예

재정렬된 중간 경유지 색인은 응답 본문의 경로 객체 내 optimizedIntermediateWaypointIndex 필드에서 찾을 수 있습니다. 인코딩된 다중선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
}

이 예에서 경유지를 최적화하면 원래 순서가 뒤집힙니다.

경유지가 최적화된 요청은 단순한 경로 요청보다 처리 시간이 더 오래 걸립니다. 따라서 X-Server-Timeout 요청 헤더의 값을 10초 이상으로 설정하여 메서드 호출에 더 긴 제한 시간을 설정하는 것이 좋습니다. 시간 초과 오류가 계속 발생하면 1초를 더 추가한 후 다시 시도할 수 있습니다.

사용 제약사항

경유지 최적화를 사용하려면 다음과 같은 사용 제한사항 및 조건을 따라야 합니다.

  • 경로의 중간 경유지에 대한 사용량 한도를 최대로 지정할 수 있습니다.

    • 위도와 경도 좌표만 사용하는 최대 98개의 경유지.
    • 장소 ID를 사용하여 경유지를 지정하는 경우 최대 25개의 경유지
  • 모든 경유지는 경유지 유형이어야 합니다. 경유지는 via 유형이 될 수 없습니다.

  • routes.optimizedIntermediateWaypointIndex를 필드 마스크에 추가해야 합니다.

  • 요청에 중간 경유지가 25개 이상 있는 경우 다음 조건도 준수해야 합니다.

    • 모든 경유지 사이에 누적된 직선 거리는 1,000km 미만이어야 합니다. 이 거리는 출발지와 목적지가 모두 포함됩니다.

    • 이동 모드는 DRIVE여야 합니다.