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

Đôi khi, bạn có thể muốn lập kế hoạch cho tuyến đường mà ứng dụng cung cấp cho người dùng. Khi sử dụng mã thông báo tuyến đường từ Routes API, Routes Preferred API hoặc Route Optimization API, bạn có thể chỉ định hai điều cho tuyến đường đã lên kế hoạch:

  • Một đường nhiều đoạn cho tuyến đường

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

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 hàng: Một doanh nghiệp giao đồ ăn có thể muố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: Một doanh nghiệp hậu cần có thể muốn nâng cao hiệu quả của tài xế và giảm chi phí nhiên liệu.

  • Giảm thiểu thời gian đến đích đến: Một hoạt động đ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 đến nơi có 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 có chi phí thấp hơn cho người đi xe 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ề cách lập 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 trong Routes API và Chuyển đổi hình nhiều đường và mã thông báo tuyến đường trong Route Optimization API.

Lý do bạn nên sử dụng mã thông báo tuyến đường cho các mục tiêu về tuyến đường

Với mã thông báo tuyến đường từ Routes API, Routes Preferred API hoặc Route Optimization API, 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 tuyến đường để SDK Điều hướng sử dụng khi có thể.

  • Chọn tuyến đường phù hợp nhất để SDK chỉ đường sử dụng. Nếu yêu cầu mã thông báo tuyến đường khi tạo tuyến đường trong Routes API, bạn sẽ nhận được mã thông báo tuyến đường cho mỗi tuyến đường được 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ã thông báo đó đến Navigation SDK.

  • Ước tính trước giá, bao gồm cả thông tin ước tính về thời gian đến dự kiến và khoảng cách. Mặc dù chi phí và thời gian thực tế có thể khác, nhưng thông tin ước tính này sẽ giảm khoảng cách giữa chi phí dự kiến và chi phí thực tế của tuyến đường.

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

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

Bạn có thể sử dụng Routes API, Routes Preferred API hoặc Route Optimization API để lập kế hoạch cho tuyến đường bằng cách sử dụng các mục tiêu của tuyến đường. Bạn có thể truyền mã thông báo tuyến đường do bất kỳ API nào trong số này trả về đến Navigation SDK để hướng dẫn cách SDK này định tuyến cho xe của bạn.

Sau đâ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:

  1. Routes API, Routes Preferred API hoặc Route Optimization API trả về một mã thông báo tuyến đường đã mã hoá, trong đó có hình nhiều đường của tuyến đường và mục tiêu của tuyến đường.

  2. Bạn truyền mã thông báo tuyến đường đến Navigation SDK.

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

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

Quy trình này giúp tuyến đường thực tế gần với tuyến đường bạn đã lên kế hoạch nhất có thể.

Lý do khiến tuyến đường đã lên kế hoạch có thể không được tuân thủ chính xác

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

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

Bạn có thể lập kế hoạch cho một 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 đường bằng Routes API, Routes Preferred API hoặc Route Optimization API

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

  2. Thiết lập yêu cầu Routes API hoặc Routes Preferred API để đáp ứng các yêu cầu khi sử dụng mã thông báo tuyến đường:

    • Đặt travel_mode thành DRIVE hoặc TWO_WHEELER
    • Đặt routing_preference thành TRAFFIC_AWARE hoặc TRAFFIC_AWARE_OPTIMAL
    • KHÔNG sử dụng Via điểm tham chiếu

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

  1. Lưu trữ mã thông báo tuyến đường: 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 đường. Ví dụ:

    let routeToken = "route token returned by Routes API"
    

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

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Truyền mã thông báo tuyến đường đến SDK Điều hướng bằng cách sử dụng mapView.navigator.setDestinations. Chỉ định các điểm tham chiếu đích đến giống như những điểm bạn đã 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 setDestinations truyền trạng thái của yêu cầu đến lệnh gọi lại. Nếu tìm thấy tuyến đường từ vị trí của người dùng đến điểm đến đã cho, thì trạng thái sẽ là .OK (GMSRouteStatusOK).

Trường hợp có nhiều điểm dừng

Bạn có thể thiết lập tối đa 25 điểm tham chiếu.

Phương thức setDestinations không hỗ trợ hành trình có nhiều điểm dừng. Sử dụng continueToNextDestinationWithCompletion() để chuyển điểm tham chiếu sang chặng tiếp theo của hành trình.

Ví dụ

Các ví dụ về mã sau đây minh hoạ cách truy xuất tuyến đường đã lên 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:location 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

Sau đây là cách tương tác giữa tuyến đường do Navigation SDK tạo và tuyến đường đã lên kế hoạch trong mã thông báo tuyến đường:

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

  • Sử dụng vị trí bắt đầu của xe.

  • Điều chỉnh theo tình trạng đường sá và giao thông. Xem phần Lý do khiến bạn có thể không đi theo đúng tuyến đường đã lên kế hoạch.

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Lượt theo dõi:

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

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