경로 계획하기

앱에서 사용자에게 제공하는 경로를 계획해야 하는 경우가 있습니다. Routes API, Routes Preferred API 또는 Route Optimization API의 경로 토큰을 사용하면 계획된 경로에 다음 두 가지를 지정할 수 있습니다.

  • 경로의 다중선

  • 경로 목표

다음은 라우팅 목표의 몇 가지 예입니다.

  • 배송 시간 최소화: 음식을 배달하는 비즈니스는 음식을 배달하는 데 걸리는 시간을 최소화하고자 할 수 있습니다.

  • 이동 시간 또는 연료 소비 최소화: 물류 비즈니스는 운전자의 효율성을 개선하고 연료 비용을 줄이고 싶을 수 있습니다.

  • 최소 도착 시간: 서비스 전달 작업은 작업 요청으로 운영자를 연결하는 데 걸리는 시간을 최소화하려고 할 수 있습니다.

  • 비용 절감 및 안전 개선: 차량 공유 업체는 승객에게 비용이 적게 들고 안전상의 이유로 특정 지역을 피하는 경로를 찾고 싶을 수 있습니다.

경로 토큰을 사용하여 경로를 계획하는 방법에 관한 자세한 내용은 Routes API의 경로 토큰 요청 및 Route Optimization API의 전환 다중선 및 경로 토큰을 참고하세요.

경로 목표에 경로 토큰을 사용하는 이유

Routes API, Routes Preferred API 또는 Route Optimization API의 경로 토큰을 사용하면 제공된 경로를 더 세부적으로 제어할 수 있습니다.

  • Navigation SDK에서 사용할 수 있는 경우 경로를 미리 계획합니다.

  • Navigation SDK에서 사용할 최적의 경로를 선택합니다. Routes API에서 경로를 생성할 때 경로 토큰을 요청하면 생성된 각 경로의 경로 토큰을 가져옵니다. 그런 다음 Navigation SDK에 전달할 때 사용할 경로의 토큰을 선택할 수 있습니다.

  • 도착 시간 및 거리에 대한 예상을 포함하여 가격을 미리 추정합니다. 실제 비용과 시간이 다를 수 있지만 이 추정치를 사용하면 예상 경로 비용과 실제 경로 비용 간의 차이가 줄어듭니다.

  • 에코 라우팅 또는 최단 경로와 같은 고급 경로 목표를 지정합니다.

경로 토큰의 작동 방식

Routes API, Routes Preferred API 또는 Route Optimization API를 사용하여 경로 목표를 사용하여 경로를 계획할 수 있습니다. 이러한 API에서 반환된 경로 토큰을 Navigation SDK에 전달하여 차량의 경로를 안내할 수 있습니다.

경로 토큰을 요청하고 사용하면 다음과 같은 일이 발생합니다.

  1. Routes API, Routes Preferred API 또는 Route Optimization API는 경로 다중선 및 경로 목표가 포함된 암호화된 경로 토큰을 반환합니다.

  2. 경로 토큰을 Navigation SDK에 전달합니다.

  3. Navigation SDK는 경로를 검색하거나, 상황이 변경되어 경로를 사용할 수 없는 경우 가장 근접한 경로를 검색합니다.

  4. 경로를 운전하는 동안 교통 상황 또는 기타 도로 상황이 변경되거나 차량이 계획된 경로에서 벗어나면 수정된 경로는 토큰의 경로 목표에 따라 최적의 경로를 계속 일치시키려고 시도합니다.

이 프로세스는 실제 경로가 계획된 경로에 얼마나 가까운지 최대화합니다.

계획된 경로가 정확하게 따르지 않을 수 있는 이유

계획된 경로와 경로 목표는 따르기 위한 가이드라인으로 생각합니다. 이는 규정적이지는 않습니다. 계획된 경로를 만든 이후에 도로 상태, 출발 위치 또는 기타 매개변수가 변경되어 계획된 경로와 안내 내비게이션에서 제공하는 경로가 다를 수 있습니다. 이 차이로 인해 다른 중요한 이동 품질 중에서 거리 및 도착 예정 시간에 대한 계획된 목표와 실제 목표가 일치하지 않을 수 있습니다.

경로 토큰을 사용하여 경로 계획

다음 단계에 설명된 대로 경로 토큰을 만든 다음 이를 Navigation SDK에 전달하여 경로를 계획할 수 있습니다.

1단계: Routes API, Routes Preferred API 또는 Route Optimization API를 사용하여 경로 토큰 만들기

  1. 다음 방법 중 하나를 사용하여 경로 토큰을 요청합니다.

    • Routes API: computeRoutes Routes API에서 경로 토큰을 요청하는 방법에 관한 자세한 내용은 경로 계산경로 토큰 요청을 참고하세요.

    • Routes Preferred API: computeCustomRoutes Routes Preferred API에서 경로 토큰을 요청하는 방법에 관한 자세한 내용은 경로 계획을 참고하세요.

    • Route Optimization API: optimizeTours 또는 batchOptimizeTours Route Optimization API에서 경로 토큰을 요청하는 방법에 관한 자세한 내용은 전환 다중선 및 경로 토큰을 참고하세요.

  2. 경로 토큰 사용 요구사항을 충족하도록 Routes API 또는 Routes Preferred API 요청을 설정합니다.

    • travel_modeDRIVING 또는 TWO_WHEELER로 설정합니다.
    • routing_preferenceTRAFFIC_AWARE 또는 TRAFFIC_AWARE_OPTIMAL로 설정합니다.
    • Via 웨이포인트는 사용하지 마세요.

2단계: 경로 토큰을 내비게이션 SDK에 전달

  1. 경로 토큰 저장: Navigation SDK에서 경로 토큰을 저장할 문자열을 설정합니다. 예를 들면 다음과 같습니다.

    let routeToken = "route token returned by Routes API"
    

    반환된 경로 토큰의 예는 다음과 같습니다.

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. mapView.navigator setDestinations 메서드를 사용하여 Navigation SDK에 경로 토큰을 전달하고 경로 토큰을 만들 때 사용한 것과 동일한 도착 웨이포인트를 지정합니다.

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

Navigator.setDestinations 메서드는 요청 상태를 반환합니다. 사용자 위치에서 지정된 목적지로 가는 경로가 발견되면 RouteStatus.OK를 반환합니다.

이 메서드에 대한 자세한 내용은 GMSNavigator.setDestinations를 참고하세요.

다음 코드 예는 계획된 경로를 검색하는 방법을 보여줍니다.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

경로 토큰과 Navigation SDK의 상호작용 방식

Navigation SDK에서 생성된 경로와 경로 토큰의 계획된 경로가 상호작용하는 방식은 다음과 같습니다.

  • 이전에 설정된 대상을 재정의합니다.

  • 차량 출발 위치를 사용합니다.

  • 도로 및 교통 상황에 따라 조정됩니다. 계획된 경로가 정확하게 반영되지 않는 이유를 참고하세요.

  • 다음 라우팅 관련 옵션은 불필요하다고 무시합니다.

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • 팔로우:

    • 갓길 환경설정과 같은 중간 지점 관련 옵션

    • 경로 목표 Navigation SDK가 반환된 경로를 조정해야 하는 경우 경로 토큰을 요청할 때 지정한 경로 목표를 사용합니다. 따라서 Routes API에서 지정한 것과 동일한 중간 지점 관련 옵션을 사용해야 합니다.