Lên kế hoạch tuyến đường

Đôi khi, bạn có thể muốn lập kế hoạch tuyến đường mà ứng dụng của bạn cung cấp cho người lái xe. Việc sử dụng mã thông báo tuyến đường từ API tuyến (hoặc API ưu tiên tuyến đường) có thể giúp bạn chỉ định hai điều cho tuyến đường theo kế hoạch của mình:

  • Hình nhiều đường cho tuyến đường

  • Mục tiêu tuyến đường của bạn

Ví dụ: sau đây là một số ví dụ về mục tiêu định tuyến mà bạn có thể có:

  • Giảm thiểu thời gian giao đồ ăn: Một doanh nghiệp giao đồ ăn nên giảm thiểu thời gian giao đồ ăn.

  • Giảm thiểu thời gian di chuyển hoặc mức tiêu thụ nhiên liệu: Doanh nghiệp kho vận có thể muốn cải thiện hiệu suất của tài xế và giảm chi phí nhiên liệu.

  • Giảm thiểu thời gian đến đích: Một thao tác điều phối dịch vụ có thể muốn giảm thiểu thời gian cần thiết để đưa nhân viên vận hành đến yêu cầu công việc.

  • Giảm chi phí và cải thiện độ an toàn: Một doanh nghiệp đi chung xe có thể muốn tìm một tuyến đường tốn ít chi phí hơn cho người đi và tránh một số khu vực nhất định vì lý do an toàn.

Để biết thêm thông tin về việc lên kế hoạch cho tuyến đường bằng mã thông báo tuyến đường, hãy xem phần Yêu cầu mã thông báo tuyến đường.

Tại sao nên sử dụng mã thông báo tuyến đường cho mục tiêu tuyến đường

Với mã thông báo tuyến đường từ API Ưu tiên tuyến đường hoặc tuyến đường, bạn có nhiều quyền kiểm soát hơn đối với tuyến đường được cung cấp:

  • Lên kế hoạch trước cho một tuyến đường để SDK điều hướng sử dụng khi có thể.

  • Chọn tuyến tốt nhất để SDK điều hướng sử dụng. Nếu yêu cầu mã thông báo tuyến đường khi tạo tuyến trong API tuyến đường, bạn sẽ nhận được mã thông báo tuyến cho từng tuyến đã tạo. Sau đó, bạn có thể chọn mã thông báo cho tuyến đường mà bạn muốn sử dụng khi truyền mã đó đến SDK điều hướng.

  • Ước tính giá trước, bao gồm cả thông tin ước tính về thời gian đến dự kiến (ETA) và khoảng cách. Mặc dù chi phí và thời gian thực tế có thể thay đổi, nhưng số liệu ước tính này sẽ giúp giảm khoảng cách giữa chi phí tuyến đường dự kiến và chi phí tuyến đường thực tế.

  • Chỉ định các mục tiêu tuyến đường nâng cao hơn, chẳng hạn như định tuyến sinh thái hoặc tuyến đường ngắn nhất.

Cách hoạt động của mã thông báo tuyến API

Bạn có thể dùng API Tuyến đường hoặc API Ưu tiên tuyến đường để lên kế hoạch cho một tuyến đường bằng cách sử dụng các mục tiêu tuyến. API Tuyến đường sẽ trả về mã thông báo tuyến đường mà bạn có thể chuyển đến SDK điều hướng để hướng dẫn cách API này xác định tuyến đường cho xe của bạn.

Dưới đây là những gì xảy ra khi bạn yêu cầu và sử dụng mã thông báo tuyến đường từ API Tuyến đường:

  1. Routes API (API Tuyến đường) sẽ trả về một mã thông báo tuyến đã mã hoá, bao gồm các mục tiêu nhiều đường và mục tiêu tuyến.

  2. Bạn truyền mã thông báo tuyến đến SDK điều hướng.

  3. SDK điều hướng truy xuất tuyến đường hoặc nếu tuyến đường không có sẵn do các điều kiện thay đổi, SDK sẽ truy xuất tuyến phù hợp nhất.

  4. Trong khi lái xe theo tuyến đường, nếu tình trạng giao thông hoặc tình trạng đường khác thay đổi hoặc nếu phương tiện đi chệch khỏi tuyến đường dự kiến, thì các tuyến đường được sửa đổi sẽ liên tục tìm cách khớp với tuyến đường tốt nhất dựa trên các mục tiêu về tuyến đường trong mã thông báo.

Quá trình này sẽ tối đa hoá khoảng cách giữa tuyến đường thực tế và tuyến đường bạn dự định.

Tại sao tuyến đường theo kế hoạch có thể không đi theo chính xác

Hãy coi các mục tiêu về tuyến đường và tuyến đường dự kiến là các nguyên tắc cần tuân theo: chúng không phải là quy tắc. Bạn có thể nhận thấy sự khác biệt giữa tuyến đường dự kiến và tuyến đường do tính năng chỉ đường có hướng dẫn cung cấp do sự khác biệt về điều kiện đường, vị trí bắt đầu hoặc các tham số khác đã thay đổi kể từ khi bạn tạo tuyến đường theo kế hoạch. Sự khác biệt này có thể dẫn đến việc mục tiêu theo kế hoạch và mục tiêu thực tế về khoảng cách và thời gian đến dự kiến (ETA) của bạn không khớp với các điều kiện quan trọng khác của chuyến đi.

Lên kế hoạch tuyến đường bằng mã thông báo tuyến đường

Bạn có thể lên kế hoạch cho tuyến đường bằng cách tạo mã thông báo tuyến đường rồi truyền mã đó đến SDK điều hướng, như mô tả trong các bước sau:

Bước 1: Tạo mã thông báo tuyến bằng API Ưu tiên về tuyến đường hoặc tuyến đường

  1. Yêu cầu mã thông báo tuyến bằng một trong các phương thức sau:

  2. Thiết lập yêu cầu về tuyến đường để đáp ứng các yêu cầu đối với việc sử dụng mã thông báo tuyến đường:

    • Thiết lập travel_mode thành DRIVING
    • Đặt routing_preference thành TRAFFIC_AWARE hoặc TRAFFIC_AWARE_OPTIMAL
    • KHÔNG sử dụng Qua điểm tham chiếu

Bước 2: Truyền mã thông báo tuyến đến SDK điều hướng

  1. Lưu trữ mã thông báo tuyến: Trong SDK điều hướng, hãy thiết lập một chuỗi để lưu trữ mã thông báo tuyến. Ví dụ:

    let routeToken = "route token returned by Routes API"

    Ví dụ về mã thông báo tuyến được trả về:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Truyền mã thông báo tuyến đến SDK điều hướng bằng cách sử dụng phương thức mapView.navigator setDestinations, chỉ định cùng các điểm tham chiếu đích mà bạn đã sử dụng khi tạo mã thông báo tuyến đường:

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

Phương thức Navigator.setDestinations trả về trạng thái của yêu cầu. Nếu tìm thấy một tuyến đường từ vị trí của người dùng đến điểm đến nhất định, tuyến đó sẽ trả về RouteStatus.OK.

Để biết thêm thông tin về phương thức này, hãy xem Navigator.setDestinations.

Ví dụ:

Các đoạn mã ví dụ sau đây minh hoạ cách truy xuất một tuyến đường theo kế hoạch.

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){...}];

Cách mã thông báo tuyến đường và SDK điều hướng tương tác

Dưới đây là cách tuyến đường do SDK điều hướng tạo ra và tuyến đường theo kế hoạch trong mã thông báo tuyến đường tương tác với nhau:

  • Ghi đè mọi đích đến đã đặt trước đó.

  • Sử dụng vị trí xuất phát của xe.

  • Điều chỉnh theo tình trạng đường và giao thông. Hãy xem phần Tại sao có thể không đi theo chính xác tuyến đường theo kế hoạch.

  • Bỏ qua các tuỳ chọn liên quan đến định tuyến sau đây khi không cần thiết:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Số lượt theo dõi:

    • Các tuỳ chọn liên quan đến điểm tham chiếu, chẳng hạn như lựa chọn ưu tiên ở hai bên đường.

    • Mục tiêu của tuyến đường. Nếu phải điều chỉnh tuyến đường được trả về, SDK Điều hướng sẽ sử dụng các mục tiêu tuyến mà bạn đã chỉ định khi yêu cầu mã thông báo tuyến. Vì lý do này, bạn nên sử dụng các tuỳ chọn liên quan đến điểm tham chiếu tương tự mà bạn đã chỉ định trong Routes API (API Tuyến đường).